{
 "cells": [
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:32:06.948405Z",
     "start_time": "2024-09-19T02:32:04.085253Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 导入相关库\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from datetime import date\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_auc_score"
   ],
   "id": "f9d8ab331393e317",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:32:18.386812Z",
     "start_time": "2024-09-19T02:32:16.074134Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "# ------------------------------------  第一部分 读取数据  --------------------------------------#\n",
    "off_train_data = pd.read_csv('ccf_offline_stage1_train.csv',encoding='utf-8')\n",
    "off_test_data = pd.read_csv('ccf_offline_stage1_test_revised.csv',encoding='utf-8')\n",
    "# 填充缺失值\n",
    "off_train_data = off_train_data.fillna('null')\n",
    "off_test_data = off_test_data.fillna('null')"
   ],
   "id": "c385c02f838a438e",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:32:18.827228Z",
     "start_time": "2024-09-19T02:32:18.680970Z"
    }
   },
   "cell_type": "code",
   "source": "off_train_data.info()",
   "id": "73e1546e7fa6342",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1754884 entries, 0 to 1754883\n",
      "Data columns (total 7 columns):\n",
      " #   Column         Dtype \n",
      "---  ------         ----- \n",
      " 0   User_id        int64 \n",
      " 1   Merchant_id    int64 \n",
      " 2   Coupon_id      object\n",
      " 3   Discount_rate  object\n",
      " 4   Distance       object\n",
      " 5   Date_received  object\n",
      " 6   Date           object\n",
      "dtypes: int64(2), object(5)\n",
      "memory usage: 93.7+ MB\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:37:12.909708Z",
     "start_time": "2024-09-19T02:36:39.468984Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "# 用label列标记分类，label的取值为1表示正样本，0表示负样本，-1表示普通用户\n",
    "def label(row):\n",
    "    if row['Date'] != 'null' and row['Date_received'] != 'null':\n",
    "        if row['Coupon_id'] != 'null':\n",
    "            # 优惠券id不为空，表示使用了优惠券购买\n",
    "            # 计算使用优惠券的日期差值\n",
    "            td = pd.to_datetime(row['Date'], format='%Y%m%d') - \\\n",
    "                 pd.to_datetime(row['Date_received'], format='%Y%m%d')\n",
    "            if td <= pd.Timedelta(15, 'D'):  # 判断使用优惠券是否在15天内\n",
    "                return 1\n",
    "            else:\n",
    "                return 0\n",
    "        else:\n",
    "            # 其他情况：优惠券id为null，表示没有使用优惠券购买\n",
    "            return 0\n",
    "    if row['Date'] == 'null' and row['Date_received'] != 'null':\n",
    "        return 0\n",
    "    else:\n",
    "        return -1\n",
    "# 标记label的值达到分类目的\n",
    "off_train_data['label'] = off_train_data.apply(label, axis = 1)\n",
    "off_train_data['label'].value_counts()\n",
    "''' \n",
    " 0    988887\n",
    "-1    701602\n",
    " 1     64395\n",
    "Name: label, dtype: int64\n",
    "'''\n",
    "off_train_data.columns\n",
    "'''\n",
    "Index(['User_id', 'Merchant_id', 'Coupon_id', 'Discount_rate', 'Distance',\n",
    "       'Date_received', 'Date', 'label'],\n",
    "      dtype='object')\n",
    "'''\n",
    "off_train_data"
   ],
   "id": "ea3d0dd3ee707c19",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "         User_id  Merchant_id Coupon_id Discount_rate Distance Date_received  \\\n",
       "0        1439408         2632      null          null      0.0          null   \n",
       "1        1439408         4663   11002.0        150:20      1.0    20160528.0   \n",
       "2        1439408         2632    8591.0          20:1      0.0    20160217.0   \n",
       "3        1439408         2632    1078.0          20:1      0.0    20160319.0   \n",
       "4        1439408         2632    8591.0          20:1      0.0    20160613.0   \n",
       "...          ...          ...       ...           ...      ...           ...   \n",
       "1754879   212662         3532      null          null      1.0          null   \n",
       "1754880   212662         3021    3739.0          30:1      6.0    20160508.0   \n",
       "1754881   212662         2934      null          null      2.0          null   \n",
       "1754882   752472         7113    1633.0         50:10      6.0    20160613.0   \n",
       "1754883   752472         3621    2705.0          20:5      0.0    20160523.0   \n",
       "\n",
       "               Date  label  \n",
       "0        20160217.0     -1  \n",
       "1              null      0  \n",
       "2              null      0  \n",
       "3              null      0  \n",
       "4              null      0  \n",
       "...             ...    ...  \n",
       "1754879  20160322.0     -1  \n",
       "1754880  20160602.0      0  \n",
       "1754881  20160321.0     -1  \n",
       "1754882        null      0  \n",
       "1754883        null      0  \n",
       "\n",
       "[1754884 rows x 8 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1439408</td>\n",
       "      <td>2632</td>\n",
       "      <td>null</td>\n",
       "      <td>null</td>\n",
       "      <td>0.0</td>\n",
       "      <td>null</td>\n",
       "      <td>20160217.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1439408</td>\n",
       "      <td>4663</td>\n",
       "      <td>11002.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>1.0</td>\n",
       "      <td>20160528.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1439408</td>\n",
       "      <td>2632</td>\n",
       "      <td>8591.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160217.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1439408</td>\n",
       "      <td>2632</td>\n",
       "      <td>1078.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160319.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1439408</td>\n",
       "      <td>2632</td>\n",
       "      <td>8591.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160613.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754879</th>\n",
       "      <td>212662</td>\n",
       "      <td>3532</td>\n",
       "      <td>null</td>\n",
       "      <td>null</td>\n",
       "      <td>1.0</td>\n",
       "      <td>null</td>\n",
       "      <td>20160322.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754880</th>\n",
       "      <td>212662</td>\n",
       "      <td>3021</td>\n",
       "      <td>3739.0</td>\n",
       "      <td>30:1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>20160508.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754881</th>\n",
       "      <td>212662</td>\n",
       "      <td>2934</td>\n",
       "      <td>null</td>\n",
       "      <td>null</td>\n",
       "      <td>2.0</td>\n",
       "      <td>null</td>\n",
       "      <td>20160321.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754882</th>\n",
       "      <td>752472</td>\n",
       "      <td>7113</td>\n",
       "      <td>1633.0</td>\n",
       "      <td>50:10</td>\n",
       "      <td>6.0</td>\n",
       "      <td>20160613.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754883</th>\n",
       "      <td>752472</td>\n",
       "      <td>3621</td>\n",
       "      <td>2705.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160523.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1754884 rows × 8 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:42:06.467135Z",
     "start_time": "2024-09-19T02:42:06.023641Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "# ------------------------------------  第二部分 数据取样  --------------------------------------#\n",
    "# 随机抽样，按照正负样例1：1\n",
    "# 切片\n",
    "X = off_train_data.loc[:,off_train_data.columns != 'label']  # 数据\n",
    "y = off_train_data.loc[:,off_train_data.columns == 'label']  # 标签\n",
    "# 获取类1标签的长度\n",
    "count_one_Class = len(off_train_data[off_train_data['label'] == 1])\n",
    "# 获取两类标签的索引\n",
    "one_Class_index = off_train_data[off_train_data['label'] == 1].index\n",
    "zero_Class_index = off_train_data[off_train_data['label'] == 0].index\n",
    "# 随机选择相同数目的索引\n",
    "np.random.seed(25)  # 定义随机种子\n",
    "random_zero_index = np.array(np.random.choice(zero_Class_index,count_one_Class,replace=True))\n",
    "# 合并模型样本索引\n",
    "sample = np.concatenate([one_Class_index,random_zero_index])\n",
    "# 按照索引获取行\n",
    "off_train_data = off_train_data.loc[sample,:]\n",
    "# 打印结果对比\n",
    "print('label为1的数目：', len(one_Class_index))\n",
    "print('label为0的数目：', len(zero_Class_index))\n",
    "print('总数：', len(one_Class_index) + len(zero_Class_index))\n",
    "print('抽样label为1的数目：', len(one_Class_index))\n",
    "print('随机抽取label为0的数目：', len(random_zero_index))\n",
    "print('抽样总数：', len(one_Class_index) + len(random_zero_index))\n",
    "print('总样本形状：', off_train_data.shape)"
   ],
   "id": "208b0a0c0aa8a349",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "label为1的数目： 64395\n",
      "label为0的数目： 988887\n",
      "总数： 1053282\n",
      "抽样label为1的数目： 64395\n",
      "随机抽取label为0的数目： 64395\n",
      "抽样总数： 128790\n",
      "总样本形状： (128790, 8)\n"
     ]
    }
   ],
   "execution_count": 7
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:42:28.340009Z",
     "start_time": "2024-09-19T02:42:28.057449Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ------------------------------------  第三部分 数据探索  --------------------------------------#\n",
    "# 探索性分析\n",
    "off_train_data.value_counts()"
   ],
   "id": "783aadefe3fb71b5",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "User_id  Merchant_id  Coupon_id  Discount_rate  Distance  Date_received  Date        label\n",
       "5625260  5341         11539.0    30:5           0.0       20160214.0     20160214.0  1        10\n",
       "2692738  5341         11539.0    30:5           0.0       20160207.0     20160209.0  1         9\n",
       "2956333  4142         4773.0     100:10         0.0       20160219.0     20160219.0  1         8\n",
       "687544   5341         11539.0    30:5           0.0       20160128.0     20160131.0  1         6\n",
       "2692738  5341         11539.0    30:5           0.0       20160207.0     20160208.0  1         6\n",
       "                                                                                              ..\n",
       "2521107  58           10364.0    50:5           0.0       20160326.0     20160406.0  1         1\n",
       "2520969  5341         111.0      30:5           0.0       20160207.0     null        0         1\n",
       "2520933  6486         2494.0     100:10         6.0       20160119.0     null        0         1\n",
       "         6424         1315.0     100:10         null      20160119.0     null        0         1\n",
       "7360941  6485         10323.0    20:5           0.0       20160325.0     20160327.0  1         1\n",
       "Name: count, Length: 124320, dtype: int64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 8
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:42:58.630448Z",
     "start_time": "2024-09-19T02:42:58.502320Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 变换距离的类型，缺失值替换为-1\n",
    "off_train_data['Distance'] = off_train_data['Distance'].replace('null', -1).astype(int)\n",
    "off_test_data['Distance'] = off_test_data['Distance'].replace('null', -1).astype(int)\n",
    "print('查看缺失值结果：\\n',off_train_data.isnull().sum())\n",
    "# 描述性统计分析\n",
    "description = off_train_data.describe()\n",
    "# 依次计算极差值、变异系数、四分位数间距\n",
    "description.loc['range'] = description.loc['max'] - description.loc['min']\n",
    "description.loc['var'] = description.loc['std'] - description.loc['mean']\n",
    "description.loc['dis'] = description.loc['75%'] - description.loc['25%']\n",
    "print('描述性统计结果：\\n',np.round(description, 2))  # 保留两位小数"
   ],
   "id": "b98a19ea23b6a5a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "查看缺失值结果：\n",
      " User_id          0\n",
      "Merchant_id      0\n",
      "Coupon_id        0\n",
      "Discount_rate    0\n",
      "Distance         0\n",
      "Date_received    0\n",
      "Date             0\n",
      "label            0\n",
      "dtype: int64\n",
      "描述性统计结果：\n",
      "           User_id  Merchant_id   Distance     label\n",
      "count   128790.00    128790.00  128790.00  128790.0\n",
      "mean   3697459.80      4077.69       1.85       0.5\n",
      "std    2123423.03      2471.02       3.36       0.5\n",
      "min        110.00         3.00      -1.00       0.0\n",
      "25%    1859343.75      1941.00       0.00       0.0\n",
      "50%    3698645.00      3621.00       0.00       0.5\n",
      "75%    5543521.50      6434.00       2.00       1.0\n",
      "max    7360941.00      8856.00      10.00       1.0\n",
      "range  7360831.00      8853.00      11.00       1.0\n",
      "var   -1574036.77     -1606.67       1.51       0.0\n",
      "dis    3684177.75      4493.00       2.00       1.0\n"
     ]
    }
   ],
   "execution_count": 9
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:50:06.636525Z",
     "start_time": "2024-09-19T02:50:06.612190Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "c350a7ae1d06b668",
   "outputs": [],
   "execution_count": 17
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:50:09.098009Z",
     "start_time": "2024-09-19T02:50:09.086007Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "801b0e4a15274a4f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "相关系数矩阵为：\n",
      "              User_id  Merchant_id  Distance\n",
      "User_id          1.0         0.00     -0.00\n",
      "Merchant_id      0.0         1.00     -0.01\n",
      "Distance        -0.0        -0.01      1.00\n"
     ]
    }
   ],
   "execution_count": 18
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-18T13:16:21.603140Z",
     "start_time": "2024-09-18T13:16:20.540326Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "db4b31f9963883e6",
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'corr' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mNameError\u001B[0m                                 Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[12], line 7\u001B[0m\n\u001B[0;32m      5\u001B[0m plt\u001B[38;5;241m.\u001B[39mrcParams[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124maxes.unicode_minus\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mFalse\u001B[39;00m\n\u001B[0;32m      6\u001B[0m plt\u001B[38;5;241m.\u001B[39msubplots(figsize\u001B[38;5;241m=\u001B[39m(\u001B[38;5;241m10\u001B[39m, \u001B[38;5;241m10\u001B[39m))  \u001B[38;5;66;03m# 设置画面大小\u001B[39;00m\n\u001B[1;32m----> 7\u001B[0m sns\u001B[38;5;241m.\u001B[39mheatmap(corr, annot\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m, vmax\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m1\u001B[39m, square\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m, cmap\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mBlues\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m      8\u001B[0m plt\u001B[38;5;241m.\u001B[39mtitle(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m相关性热力图\u001B[39m\u001B[38;5;124m'\u001B[39m)\n\u001B[0;32m      9\u001B[0m plt\u001B[38;5;241m.\u001B[39mshow()\n",
      "\u001B[1;31mNameError\u001B[0m: name 'corr' is not defined"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0QAAAMwCAYAAAAAqqD5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAme0lEQVR4nO3df4zX9X3A8df1Dg5YuF/CbvakgBwjVktM2DUICWSVqmmFGJs06JomnX/UspiS2lu9RLcZF7lUdyVp1rWkZxFn7bpabTrjGhMRQiIzFwPL5aydHRS4OD1v+P2iwDeA3/3RcSmlHN/7ct9DeD0eyfePzyef931el7z98eT7/X6oK5fL5QAAAEjoIxd7AAAAgItFEAEAAGkJIgAAIC1BBAAApCWIAACAtAQRAACQliACAADSEkQAAEBagggAAEhLEAEAAGlNOIhGR0dj4cKFsX///oqu37FjR1xzzTUxZ86c6Ovrm+jtAAAAamZCQfTOO+/ErbfeWnEMjYyMxLp16+KOO+6Il19+OZ588snYvn17NXMCAABMuoaJXLx+/fpYv3597N69u6Lrn3zyybjyyivjgQceiLq6uvibv/mb6O/vjz//8z8/55pSqRSlUmns+IMPPoj//d//jSuuuCLq6uomMi4AAHAZKZfLceTIkfjoRz8aH/nI5Hz7p65cLpcrvfi///u/4+qrr466urrYt29fLFiwYNzrv/SlL8XMmTPjO9/5TkREvPnmm3HjjTfG0NDQOdf83d/9XTz44IOVjgQAACRz8ODBuOqqqyblZ03oHaKrr756Qj+8WCzGxz/+8bHjpqamGB4eHndNT09PfO1rXxs7LhQK8bGPfSwOHjwYTU1NE7o/AABw+SgWizFv3ryYPXv2pP3MCQXRhH94Q0M0NjaOHc+YMSOOHj067prGxsYz1pzW1NQkiAAAgEn9Kk1NH7vd1tYWIyMjY8dHjhyJ6dOn1/KWAAAAFatpEHV1dZ3xAIY9e/ZER0dHLW8JAABQsUkJomKxGCdOnDjr/Lp162LXrl2xffv2OHnyZDz66KNx8803T8YtAQAALtikBNHSpUvjueeeO+v8nDlz4h/+4R/i5ptvjiuvvDIGBwfj/vvvn4xbAgAAXLAJPXa7Wm+88Ua89tprsXr16gk/GKFYLEZzc3MUCgUPVQAAgMRq0QY1fcrcaZ2dndHZ2TkVtwIAAKhYTR+qAAAA8GEmiAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABIa0JBNDg4GF1dXdHa2hrd3d1RLpfPu+aRRx6J9vb2aGpqis997nMxOjpa9bAAAACTqeIgKpVKsXbt2li2bFkMDAzE0NBQbN26ddw1O3fujMcffzx27twZr776ahw/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t6/KcQEAACZPxUHU1dUVu3fvHjvev39/lEqlaGtrO+eaefPmxbFjx8aOP/jggzh06FDMnz+/ynEBAAAmT8VBtGrVqigUCrFt27aIiOjt7Y01a9ZEfX19FIvFOHHixFlrPv/5z8fPf/7zePrpp+PQoUPR09MTpVIpVq5cOXm/AQAAQJUqDqKGhobYsmVL3H333dHe3h4/+clPore3NyJ++8S555577qw1S5YsiX/5l3+Jv//7v4/FixfHc889Fz/72c9i9uzZk/cbAAAAVKmufL7nYP+e4eHhGBgYiBUrVsTcuXNrNdeYYrEYzc3NUSgUoqmpqeb3AwAAPpxq0QYVP2XutI6Ojujo6JiUmwMAAFxMFX9kDgAA4HIjiAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABIa0JBNDg4GF1dXdHa2hrd3d1RLpcrXnvixIn4xCc+ES+99NJEZwQAAKiJioOoVCrF2rVrY9myZTEwMBBDQ0OxdevWim/0zW9+MwYHB6uZEQAAoCYqDqLnn38+CoVC9PX1xaJFi+Lhhx+O/v7+itb+13/9Vzz66KOxYMGC815bKpWiWCye8QIAAKiFioNo7969sXz58pg1a1ZERCxdujSGhoYqWvvlL3857rvvvpg/f/55r920aVM0NzePvebNm1fpiAAAABNScRAVi8VYuHDh2HFdXV3U19fH4cOHx133gx/8IAqFQtx7770V3aenpycKhcLY6+DBg5WOCAAAMCENFV/Y0BCNjY1nnJsxY0YcPXo0Wltb/+CakZGR6OnpiX//93+PhobKbtXY2HjWfQAAAGqh4neI2traYmRk5IxzR44cienTp59zzcaNG+Ouu+6K66+/vuoBAQAAaqXiIOrq6ordu3ePHe/fvz9KpVK0tbWdc80Pf/jD+Pa3vx0tLS3R0tISu3btiltvvTV6e3svbGoAAIBJUPFH5latWhWFQiG2bdsWX/ziF6O3tzfWrFkT9fX1USwWY+bMmTFt2rQz1uzbt++M4/Xr18fGjRvjlltumZzpAQAALsCEvkO0ZcuWuPPOO6O7uztOnToVO3bsiIjfPnFu8+bNcdttt52x5vcfsz1jxoz4kz/5k2hpabnQuQEAAC5YXblcLk9kwfDwcAwMDMSKFSti7ty5tZprTLFYjObm5igUCtHU1FTz+wEAAB9OtWiDit8hOq2joyM6Ojom5eYAAAAXU8UPVQAAALjcCCIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0hJEAABAWoIIAABISxABAABpCSIAACAtQQQAAKQliAAAgLQEEQAAkJYgAgAA0ppQEA0ODkZXV1e0trZGd3d3lMvl867ZsmVLXHnllTFt2rS46aab4s0336x6WAAAgMlUcRCVSqVYu3ZtLFu2LAYGBmJoaCi2bt067ppdu3bFAw88EE888UTs27cvjh8/Hl//+tcvdGYAAIBJUXEQPf/881EoFKKvry8WLVoUDz/8cPT394+75vXXX49/+qd/ijVr1sRVV10VX/rSl2JgYGDcNaVSKYrF4hkvAACAWmio9MK9e/fG8uXLY9asWRERsXTp0hgaGhp3zV133XXG8euvvx6dnZ3jrtm0aVM8+OCD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XmOq2GtMFXuNqVKLvVbxY7cjfvvo7TvvvDNmz54dp06dih07dsS1114bCxYsiM2bN8dtt9121prvfOc7sXHjxmhubo4/+qM/iv/4j/+I9vb2SfsFAAAAqjWhIIqIGB4ejoGBgVixYkXMnTu3ojVvvPFGvPbaa7F69WpftAMAAD40JhxEAAAAl4vJe14dAADAJUYQAQAAaV30IBocHIyurq5obW2N7u7uqOQTfDt27Ihrrrkm5syZE319fVMwJZeDavbali1b4sorr4xp06bFTTfdFG+++eYUTMqlrpq9dtqJEyfiE5/4RLz00ku1G5DLxoXstfXr18c999xTw+m4nFSz1x555JFob2+Ppqam+NznPhejo6NTMCmXutHR0Vi4cGHs37+/ousnowsuahCVSqVYu3ZtLFu2LAYGBmJoaCi2bt067pqRkZFYt25d3HHHHfHyyy/Hk08+Gdu3b5+agblkVbPXdu3aFQ888EA88cQTsW/fvjh+/Hh8/etfn5qBuWRVs9d+1ze/+c0YHBys3YBcNi5kr/3iF7+IF198MR566KHaDslloZq9tnPnznj88cdj586d8eqrr8bx48fj3nvvnZqBuWS98847ceutt1YcQ5PWBeWL6Jlnnim3traW33///XK5XC7v2bOnvHLlynHXfOtb3yovWbKk/MEHH5TL5XL52WefLf/FX/xFzWfl0lbNXvv+979ffvrpp8eOH3vssfKf/umf1nROLn3V7LXTfvWrX5VbWlrKCxYsKG/fvr2GU3I5qHavHT16tHz11VeX+/v7az0il4lq9tojjzxS7u7uHjt+4oknyjfccENN5+TSd+ONN5Y3b95cjojyvn37znv9ZHXBRX2HaO/evbF8+fKYNWtWREQsXbo0hoaGzrvmU5/6VNTV1UVExCc/+cl49dVXaz4rl7Zq9tpdd90Vt99++9jx66+/Hp2dnTWdk0tfNXvttC9/+ctx3333xfz582s5IpeJavfaQw89FMeOHYuGhoZ48cUXJ/QxO3KqZq9dd9118dOf/jR+/etfx9tvvx39/f3x6U9/eirG5RK2ZcuW+OpXv1rx9ZPVBRc1iIrFYixcuHDsuK6uLurr6+Pw4cMVr2lqaorh4eGazsmlr5q99rtGR0fje9/7XmzYsKFWI3KZqHav/eAHP4hCoeAjJVSsmr124MCB6Ovri87Ozjhw4EB0d3fH7bffLooYVzV77ZZbbonFixdHZ2dntLe3x/vvvx/33XffVIzLJezqq6+e0PWT1QUXNYgaGhqisbHxjHMzZsyIo0ePVrzmfNdDRHV77Xdt2LAhVqxYEZ/97GdrMR6XkWr22sjISPT09ER/f380NDTUekQuE9Xsta1bt0Z7e3u88MILcf/998dLL70UO3bsiBdeeKHW43IJq2av/fjHP47f/OY38ctf/jJGR0fjuuuuiy984Qu1HpVkJqsLLup/edva2s768vCRI0di+vTp464ZGRmp+HqIqG6vnfbYY4/Fzp07Y8+ePTWajstJNXtt48aNcdddd8X1119f4+m4nFSz1w4dOhQ33njj2P9AzJ49OxYvXhz79u2r6axc2qrZa0899VR85StfiSVLlkRExObNm6O5uTnefffdaGlpqeW4JDJZXXBR3yHq6uqK3bt3jx3v378/SqVStLW1Vbxmz5490dHRUdM5ufRVs9ciIl555ZXYuHFj/OhHP4r29vZaj8lloJq99sMf/jC+/e1vR0tLS7S0tMSuXbvi1ltvjd7e3qkYmUtUNXtt3rx5cezYsbHjDz74IA4dOuR7a4yrmr128uTJeOutt8aOT/+1FadOnardoKQzWV1wUYNo1apVUSgUYtu2bRER0dvbG2vWrIn6+vooFotx4sSJs9asW7cudu3aFdu3b4+TJ0/Go48+GjfffPNUj84lppq99tZbb8XatWvjG9/4Rixbtizee++9eO+996Z6dC4x1ey1ffv2xX/+53/Gnj17Ys+ePfFnf/Zn8f3vfz/uvvvuqR6fS0g1e+3zn/98/PznP4+nn346Dh06FD09PVEqlWLlypVTPT6XkGr22sqVK2PLli3x3e9+Nx5//PFYv3593HDDDXHFFVdM9fhcBmreBRN+Lt0ke+aZZ8ozZ84s//Ef/3H5iiuuKA8ODpbL5XJ5/vz55WeeeeYPrvnHf/zH8rRp08pz5swpz58/v/w///M/Uzgxl6qJ7rVvfetb5Yg46wXnU82/137X6tWrPXabilSz1/7t3/6tfP3115dnzJhRvvbaa8u7du2awom5VE10rx07dqx8zz33lD/60Y+Wp0+fXl69enX5jTfemOKpuVTF7z12u9ZdUPf/N72ohoeHY2BgIFasWBFz586taM0bb7wRr732WqxevTqamppqPCGXi2r2GlTDXmOq2GtMFXuND6sL7YIPRRABAABcDBf1O0QAAAAXkyACAADSEkQAAEBagggAAEhLEAEAAGkJIgAAIC1BBAAApCWIAACAtAQRAACQ1v8Bq2Ilk3EP56gAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 12
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:51:09.179994Z",
     "start_time": "2024-09-19T02:51:09.173357Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "# ------------------------------------  第四部分 数据预处理  --------------------------------------#\n",
    "# 属性构造\n",
    "# 定义函数处理折扣率\n",
    "def convertRate(row):\n",
    "    if row == 'null':\n",
    "        return 1.0\n",
    "    elif ':' in str(row):\n",
    "        rows = row.split(':')\n",
    "        return 1.0 - float(rows[1]) / float(rows[0])\n",
    "    else:\n",
    "        return float(row)\n",
    "# 定义函数处理折扣率类型\n",
    "def getDiscountType(row):\n",
    "    if row == -1:\n",
    "        return -1\n",
    "    elif ':' in row:\n",
    "        # 满多少减多少\n",
    "        return 1\n",
    "    else:\n",
    "        # 折扣率\n",
    "        return 0\n",
    "# 定义函数处理满减类型的折扣优惠券\n",
    "def Man_Rate(row):\n",
    "    if row == -1:\n",
    "        return 0\n",
    "    elif ':' in str(row):\n",
    "        rows = row.split(':')\n",
    "        return int(rows[0])\n",
    "    else:\n",
    "        return 0\n",
    "def Jian_Rate(row):\n",
    "    if row == -1:\n",
    "        return 0\n",
    "    elif ':' in str(row):\n",
    "        rows = row.split(':')\n",
    "        return int(rows[1])\n",
    "    else:\n",
    "        return 0\n"
   ],
   "id": "959bdc1809523ad8",
   "outputs": [],
   "execution_count": 19
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:57:42.043860Z",
     "start_time": "2024-09-19T02:57:41.370205Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 调用函数构建跟折扣率相关的四个特征属性\n",
    "# 处理训练集折扣率数据\n",
    "off_train_data['Dis_rate'] = off_train_data['Discount_rate'].apply(convertRate)\n",
    "# off_train_data['Dis_rate']\n",
    "off_train_data['Discount_type'] = off_train_data['Discount_rate'].apply(getDiscountType)\n",
    "# off_train_data['Discount_type']\n",
    "off_train_data['Discount_man'] = off_train_data['Discount_rate'].apply(Man_Rate)\n",
    "off_train_data['Discount_man']\n",
    "off_train_data['Discount_jian'] = off_train_data['Discount_rate'].apply(Jian_Rate)\n",
    "off_train_data['Discount_jian']\n",
    "\n",
    "# 处理测试集折扣率数据\n",
    "off_test_data['Dis_rate'] = off_test_data['Discount_rate'].apply(convertRate)\n",
    "off_test_data['Discount_type'] = off_test_data['Discount_rate'].apply(getDiscountType)\n",
    "off_test_data['Discount_man'] = off_test_data['Discount_rate'].apply(Man_Rate)\n",
    "off_test_data['Discount_jian'] = off_test_data['Discount_rate'].apply(Jian_Rate)\n",
    "off_test_data['Discount_jian'] \n",
    "# '''\n",
    "# # 保存文件，方便下次读取操作\n",
    "# off_train_data.to_csv('./final_off_train_data.csv')\n",
    "# off_test_data.to_csv('./final_off_test_data.csv')\n",
    "# # 读取保存的文件\n",
    "# off_train_data = pd.read_csv('./final_off_train_data.csv',index_col=0)\n",
    "# off_test_data = pd.read_csv('./final_off_test_data.csv',index_col=0)\n",
    "# '''\n",
    "# 根据label标签来提取正、负样本的全部数据\n",
    "data = off_train_data[off_train_data['label'] != -1]\n",
    "data = data.fillna(-1)\n",
    "data['label'].value_counts()\n"
   ],
   "id": "5427525b622e6d05",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "label\n",
       "1    64395\n",
       "0    64395\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 28
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T02:58:44.611630Z",
     "start_time": "2024-09-19T02:58:44.597866Z"
    }
   },
   "cell_type": "code",
   "source": "data",
   "id": "4f89f25385652588",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "         User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "33       1113008         1361    11166.0          20:1         0   \n",
       "38       2881376         8390     7531.0          20:5         0   \n",
       "69        114747         6901     2366.0          30:5         0   \n",
       "76        114747         5341      111.0          30:5         0   \n",
       "77        114747         5341     7751.0         50:10         0   \n",
       "...          ...          ...        ...           ...       ...   \n",
       "1406393  7022032         3381    11951.0        200:20         8   \n",
       "701480   2405922         1569     5054.0        200:30         4   \n",
       "332686   2621253          450     8555.0          30:5        10   \n",
       "667768   1475575         5256    10219.0          30:5        -1   \n",
       "101352   6135816         2709     2840.0        100:10         5   \n",
       "\n",
       "         Date_received        Date  label  Dis_rate  Discount_type  \\\n",
       "33          20160515.0  20160521.0      1  0.950000              1   \n",
       "38          20160321.0  20160329.0      1  0.750000              1   \n",
       "69          20160523.0  20160605.0      1  0.833333              1   \n",
       "76          20160207.0  20160218.0      1  0.833333              1   \n",
       "77          20160127.0  20160128.0      1  0.800000              1   \n",
       "...                ...         ...    ...       ...            ...   \n",
       "1406393     20160129.0        null      0  0.900000              1   \n",
       "701480      20160330.0        null      0  0.850000              1   \n",
       "332686      20160204.0        null      0  0.833333              1   \n",
       "667768      20160428.0        null      0  0.833333              1   \n",
       "101352      20160127.0        null      0  0.900000              1   \n",
       "\n",
       "         Discount_man  Discount_jian  \n",
       "33                 20              1  \n",
       "38                 20              5  \n",
       "69                 30              5  \n",
       "76                 30              5  \n",
       "77                 50             10  \n",
       "...               ...            ...  \n",
       "1406393           200             20  \n",
       "701480            200             30  \n",
       "332686             30              5  \n",
       "667768             30              5  \n",
       "101352            100             10  \n",
       "\n",
       "[128790 rows x 12 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>Discount_man</th>\n",
       "      <th>Discount_jian</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>2881376</td>\n",
       "      <td>8390</td>\n",
       "      <td>7531.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160321.0</td>\n",
       "      <td>20160329.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>114747</td>\n",
       "      <td>6901</td>\n",
       "      <td>2366.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160523.0</td>\n",
       "      <td>20160605.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>114747</td>\n",
       "      <td>5341</td>\n",
       "      <td>111.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160207.0</td>\n",
       "      <td>20160218.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>114747</td>\n",
       "      <td>5341</td>\n",
       "      <td>7751.0</td>\n",
       "      <td>50:10</td>\n",
       "      <td>0</td>\n",
       "      <td>20160127.0</td>\n",
       "      <td>20160128.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>1</td>\n",
       "      <td>50</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1406393</th>\n",
       "      <td>7022032</td>\n",
       "      <td>3381</td>\n",
       "      <td>11951.0</td>\n",
       "      <td>200:20</td>\n",
       "      <td>8</td>\n",
       "      <td>20160129.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>701480</th>\n",
       "      <td>2405922</td>\n",
       "      <td>1569</td>\n",
       "      <td>5054.0</td>\n",
       "      <td>200:30</td>\n",
       "      <td>4</td>\n",
       "      <td>20160330.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.850000</td>\n",
       "      <td>1</td>\n",
       "      <td>200</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>332686</th>\n",
       "      <td>2621253</td>\n",
       "      <td>450</td>\n",
       "      <td>8555.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>10</td>\n",
       "      <td>20160204.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>667768</th>\n",
       "      <td>1475575</td>\n",
       "      <td>5256</td>\n",
       "      <td>10219.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160428.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101352</th>\n",
       "      <td>6135816</td>\n",
       "      <td>2709</td>\n",
       "      <td>2840.0</td>\n",
       "      <td>100:10</td>\n",
       "      <td>5</td>\n",
       "      <td>20160127.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>128790 rows × 12 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 29
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:02:28.395150Z",
     "start_time": "2024-09-19T03:02:27.611679Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 获取领券日期是星期几，并且构建成特征\n",
    "def getWeekday(row):\n",
    "    if row == 'null':\n",
    "        return row\n",
    "    else:\n",
    "        # 星期一是0，星期二是1，依此类推，直到星期日是6。  所以要 +1\n",
    "        return date(int(row[0:4]),int(row[4:6]),int(row[6:8])).weekday()+1\n",
    " \n",
    "data['Weekday'] = data['Date_received'].astype(str).apply(getWeekday)\n",
    "off_test_data['Weekday'] = off_test_data['Date_received'].astype(str).apply(getWeekday)\n",
    "# 周六日为类型1，其他为0\n",
    "data['Is_weekend'] = data['Weekday'].apply(lambda x: 1 if x in [6,7] else 0)\n",
    "off_test_data['Is_weekend'] = off_test_data['Weekday'].apply(lambda x: 1 if x in [6,7] else 0)\n",
    "data['Is_weekend']"
   ],
   "id": "83199d7ef9f23171",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "33         1\n",
       "38         0\n",
       "69         0\n",
       "76         1\n",
       "77         0\n",
       "          ..\n",
       "1406393    0\n",
       "701480     0\n",
       "332686     0\n",
       "667768     0\n",
       "101352     0\n",
       "Name: Is_weekend, Length: 128790, dtype: int64"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 32
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:26:53.289117Z",
     "start_time": "2024-09-19T03:26:53.255661Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 跟星期相关的独热编码\n",
    "def One_hot(df):\n",
    "    weekdaycols = ['weekday' + str(i) for i in range(1,8)]\n",
    "    # 将分类变量（categorical variable）转换为哑变量（dummy variable）或指示变量（indicator variable）。它将每个唯一的类别值转换为一个列，列中的值要么是0，要么是1，其中1表示该行属于该类别。\n",
    "    tmpdf = pd.get_dummies(df['Weekday'].replace('null', np.nan))\n",
    "    # 将星期几bool类型的值转为数值类型\n",
    "    tmpdf = tmpdf.astype(int)\n",
    "    tmpdf.columns = weekdaycols\n",
    "    df[weekdaycols] = tmpdf\n",
    "    return df\n",
    "data = One_hot(data)\n",
    "data\n",
    "off_test_data = One_hot(off_test_data)\n",
    "off_test_data\n"
   ],
   "id": "ab14e9c627d0b46b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       4129537          450       9983          30:5         1   \n",
       "1       6949378         1300       3429          30:5        -1   \n",
       "2       2166529         7113       6928        200:20         5   \n",
       "3       2166529         7113       1808        100:10         5   \n",
       "4       6172162         7605       6500          30:1         2   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "113635  5828093         5717      10418          30:5        10   \n",
       "113636  6626813         1699       7595          30:1        -1   \n",
       "113637  6626813         7321       7590          50:5        -1   \n",
       "113638  4547069          760      13602          30:5         0   \n",
       "113639  6675965         7487        613          20:1         5   \n",
       "\n",
       "        Date_received  Dis_rate  Discount_type  Discount_man  Discount_jian  \\\n",
       "0            20160712  0.833333              1            30              5   \n",
       "1            20160706  0.833333              1            30              5   \n",
       "2            20160727  0.900000              1           200             20   \n",
       "3            20160727  0.900000              1           100             10   \n",
       "4            20160708  0.966667              1            30              1   \n",
       "...               ...       ...            ...           ...            ...   \n",
       "113635       20160716  0.833333              1            30              5   \n",
       "113636       20160707  0.966667              1            30              1   \n",
       "113637       20160712  0.900000              1            50              5   \n",
       "113638       20160717  0.833333              1            30              5   \n",
       "113639       20160728  0.950000              1            20              1   \n",
       "\n",
       "        Weekday  Is_weekend  weekday1  weekday2  weekday3  weekday4  weekday5  \\\n",
       "0             2           0         0         1         0         0         0   \n",
       "1             3           0         0         0         1         0         0   \n",
       "2             3           0         0         0         1         0         0   \n",
       "3             3           0         0         0         1         0         0   \n",
       "4             5           0         0         0         0         0         1   \n",
       "...         ...         ...       ...       ...       ...       ...       ...   \n",
       "113635        6           1         0         0         0         0         0   \n",
       "113636        4           0         0         0         0         1         0   \n",
       "113637        2           0         0         1         0         0         0   \n",
       "113638        7           1         0         0         0         0         0   \n",
       "113639        4           0         0         0         0         1         0   \n",
       "\n",
       "        weekday6  weekday7  \n",
       "0              0         0  \n",
       "1              0         0  \n",
       "2              0         0  \n",
       "3              0         0  \n",
       "4              0         0  \n",
       "...          ...       ...  \n",
       "113635         1         0  \n",
       "113636         0         0  \n",
       "113637         0         0  \n",
       "113638         0         1  \n",
       "113639         0         0  \n",
       "\n",
       "[113640 rows x 19 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>Discount_man</th>\n",
       "      <th>Discount_jian</th>\n",
       "      <th>Weekday</th>\n",
       "      <th>Is_weekend</th>\n",
       "      <th>weekday1</th>\n",
       "      <th>weekday2</th>\n",
       "      <th>weekday3</th>\n",
       "      <th>weekday4</th>\n",
       "      <th>weekday5</th>\n",
       "      <th>weekday6</th>\n",
       "      <th>weekday7</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4129537</td>\n",
       "      <td>450</td>\n",
       "      <td>9983</td>\n",
       "      <td>30:5</td>\n",
       "      <td>1</td>\n",
       "      <td>20160712</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6949378</td>\n",
       "      <td>1300</td>\n",
       "      <td>3429</td>\n",
       "      <td>30:5</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160706</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2166529</td>\n",
       "      <td>7113</td>\n",
       "      <td>6928</td>\n",
       "      <td>200:20</td>\n",
       "      <td>5</td>\n",
       "      <td>20160727</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2166529</td>\n",
       "      <td>7113</td>\n",
       "      <td>1808</td>\n",
       "      <td>100:10</td>\n",
       "      <td>5</td>\n",
       "      <td>20160727</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6172162</td>\n",
       "      <td>7605</td>\n",
       "      <td>6500</td>\n",
       "      <td>30:1</td>\n",
       "      <td>2</td>\n",
       "      <td>20160708</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113635</th>\n",
       "      <td>5828093</td>\n",
       "      <td>5717</td>\n",
       "      <td>10418</td>\n",
       "      <td>30:5</td>\n",
       "      <td>10</td>\n",
       "      <td>20160716</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113636</th>\n",
       "      <td>6626813</td>\n",
       "      <td>1699</td>\n",
       "      <td>7595</td>\n",
       "      <td>30:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160707</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113637</th>\n",
       "      <td>6626813</td>\n",
       "      <td>7321</td>\n",
       "      <td>7590</td>\n",
       "      <td>50:5</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160712</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>50</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113638</th>\n",
       "      <td>4547069</td>\n",
       "      <td>760</td>\n",
       "      <td>13602</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160717</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113639</th>\n",
       "      <td>6675965</td>\n",
       "      <td>7487</td>\n",
       "      <td>613</td>\n",
       "      <td>20:1</td>\n",
       "      <td>5</td>\n",
       "      <td>20160728</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>113640 rows × 19 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 42
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:27:15.987589Z",
     "start_time": "2024-09-19T03:27:15.472056Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义函数得到另外相关的三个特征属性\n",
    "def func(data):\n",
    "    # 提取用户使用的优惠券的数量\n",
    "    f = data[['User_id', 'Coupon_id']]\n",
    "    f['rec_coupon'] = 1\n",
    "    f = f.groupby(['User_id']).agg('sum').reset_index()\n",
    " \n",
    "    # 全部优惠券的数目\n",
    "    f1 = data[['Coupon_id']]\n",
    "    l1 = len(f1)\n",
    "    f1['Number_coupon'] = 1\n",
    "    f1 = f1.groupby(['Coupon_id']).agg('sum').reset_index()\n",
    "    # 优惠券的流行度：每一种优惠券占全部优惠券的比例\n",
    "    f1['Coupon_popu'] = f1['Number_coupon']/l1\n",
    " \n",
    "    # 提取用户和商家\n",
    "    f2 = data[['User_id','Merchant_id']]\n",
    "    l2 = len(f2)\n",
    "    # 提取顾客去商家的数量\n",
    "    f2['Number_merchant'] = 1\n",
    "    f2 = f2.groupby(['Merchant_id']).agg('sum').reset_index()\n",
    "    # 商家的受欢迎度：商家的顾客（用户）占全部商家的顾客（用户）的比例\n",
    "    f2['Merchant_popu'] = f2['Number_merchant']/l2\n",
    " \n",
    "    # 合并特征属性\n",
    "    d0 = pd.merge(data, f[['User_id','rec_coupon']], on='User_id')\n",
    "    d1 = pd.merge(d0,f1[['Coupon_id','Coupon_popu']],on='Coupon_id')\n",
    "    d2 = pd.merge(d1,f2[['Merchant_id','Merchant_popu']],on=['Merchant_id'])\n",
    "    return d2\n",
    "# 调用以上函数构建相关的三个特征属性\n",
    "new_data = func(data)\n",
    "new_test_data = func(off_test_data)\n",
    "new_data"
   ],
   "id": "93ce4f799b49b7c2",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1184\\2871514971.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f['rec_coupon'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1184\\2871514971.py:11: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f1['Number_coupon'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1184\\2871514971.py:20: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f2['Number_merchant'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1184\\2871514971.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f['rec_coupon'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1184\\2871514971.py:11: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f1['Number_coupon'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1184\\2871514971.py:20: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f2['Number_merchant'] = 1\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       1113008         1361    11166.0          20:1         0   \n",
       "1       1449506         1361    11166.0          20:1         1   \n",
       "2       1449506         1361    11166.0          20:1         1   \n",
       "3       4781321         1361    11166.0          20:1         0   \n",
       "4       4781321         1361    11166.0          20:1         0   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "128785  5389427         1184     1857.0        150:20         0   \n",
       "128786     6896         2511      869.0          50:5         0   \n",
       "128787  6598279         2846    11348.0        100:30         2   \n",
       "128788   287650         2123     1453.0          20:1        -1   \n",
       "128789   490662         5176     3923.0          20:5         7   \n",
       "\n",
       "        Date_received        Date  label  Dis_rate  Discount_type  ...  \\\n",
       "0          20160515.0  20160521.0      1  0.950000              1  ...   \n",
       "1          20160516.0  20160522.0      1  0.950000              1  ...   \n",
       "2          20160522.0  20160602.0      1  0.950000              1  ...   \n",
       "3          20160516.0  20160521.0      1  0.950000              1  ...   \n",
       "4          20160521.0  20160524.0      1  0.950000              1  ...   \n",
       "...               ...         ...    ...       ...            ...  ...   \n",
       "128785     20160521.0        null      0  0.866667              1  ...   \n",
       "128786     20160504.0        null      0  0.900000              1  ...   \n",
       "128787     20160522.0        null      0  0.700000              1  ...   \n",
       "128788     20160509.0        null      0  0.950000              1  ...   \n",
       "128789     20160418.0        null      0  0.750000              1  ...   \n",
       "\n",
       "        weekday1  weekday2  weekday3  weekday4  weekday5  weekday6  weekday7  \\\n",
       "0              0         0         0         0         0         0         1   \n",
       "1              1         0         0         0         0         0         0   \n",
       "2              0         0         0         0         0         0         1   \n",
       "3              1         0         0         0         0         0         0   \n",
       "4              0         0         0         0         0         1         0   \n",
       "...          ...       ...       ...       ...       ...       ...       ...   \n",
       "128785         0         0         0         0         0         1         0   \n",
       "128786         0         0         1         0         0         0         0   \n",
       "128787         0         0         0         0         0         0         1   \n",
       "128788         1         0         0         0         0         0         0   \n",
       "128789         1         0         0         0         0         0         0   \n",
       "\n",
       "        rec_coupon  Coupon_popu  Merchant_popu  \n",
       "0                1     0.000085       0.000085  \n",
       "1                2     0.000085       0.000085  \n",
       "2                2     0.000085       0.000085  \n",
       "3                3     0.000085       0.000085  \n",
       "4                3     0.000085       0.000085  \n",
       "...            ...          ...            ...  \n",
       "128785           1     0.000008       0.000008  \n",
       "128786           1     0.000008       0.000008  \n",
       "128787           1     0.000008       0.000008  \n",
       "128788           1     0.000008       0.000008  \n",
       "128789           1     0.000008       0.000008  \n",
       "\n",
       "[128790 rows x 24 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday1</th>\n",
       "      <th>weekday2</th>\n",
       "      <th>weekday3</th>\n",
       "      <th>weekday4</th>\n",
       "      <th>weekday5</th>\n",
       "      <th>weekday6</th>\n",
       "      <th>weekday7</th>\n",
       "      <th>rec_coupon</th>\n",
       "      <th>Coupon_popu</th>\n",
       "      <th>Merchant_popu</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128785</th>\n",
       "      <td>5389427</td>\n",
       "      <td>1184</td>\n",
       "      <td>1857.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128786</th>\n",
       "      <td>6896</td>\n",
       "      <td>2511</td>\n",
       "      <td>869.0</td>\n",
       "      <td>50:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160504.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128787</th>\n",
       "      <td>6598279</td>\n",
       "      <td>2846</td>\n",
       "      <td>11348.0</td>\n",
       "      <td>100:30</td>\n",
       "      <td>2</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128788</th>\n",
       "      <td>287650</td>\n",
       "      <td>2123</td>\n",
       "      <td>1453.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160509.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128789</th>\n",
       "      <td>490662</td>\n",
       "      <td>5176</td>\n",
       "      <td>3923.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>7</td>\n",
       "      <td>20160418.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>128790 rows × 24 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 43
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:34:48.131333Z",
     "start_time": "2024-09-19T03:34:47.913287Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义函数得到跟距离相关的特征属性\n",
    "def Get_mer_dis(new_data):\n",
    "    # 查看距离的类别数量\n",
    "    new_data['Distance'].value_counts()\n",
    "    # 提取用户-商家距离的数据集\n",
    "    md1 = new_data[new_data.Coupon_id != 'null'][['Merchant_id', 'Distance']]\n",
    "    md1.replace('null', -1, inplace=True)\n",
    "    md1.replace(-1, np.nan, inplace=True)\n",
    "    # 用户-商家的距离最小值\n",
    "    md2 = md1.groupby('Merchant_id').agg('min').reset_index()\n",
    "    md2.rename(columns={'Distance': 'merchant_min_distance'}, inplace=True)\n",
    "    # 用户-商家的距离最大值\n",
    "    md3 = md1.groupby('Merchant_id').agg('max').reset_index()\n",
    "    md3.rename(columns={'Distance': 'merchant_max_distance'}, inplace=True)\n",
    "    # 用户-商品的距离平均值\n",
    "    md4 = md1.groupby('Merchant_id').agg('mean').reset_index()\n",
    "    md4.rename(columns={'Distance': 'merchant_mean_distance'}, inplace=True)\n",
    "    # 用户-离商品的距离中位值\n",
    "    md5 = md1.groupby('Merchant_id').agg('median').reset_index()\n",
    "    md5.rename(columns={'Distance': 'merchant_median_distance'}, inplace=True)\n",
    "    # 将所有特征合并在一起\n",
    "    merchant_feature = pd.merge(md2, md3, on='Merchant_id', how='left')\n",
    "    merchant_feature = pd.merge(merchant_feature, md4, on='Merchant_id', how='left')\n",
    "    merchant_feature = pd.merge(merchant_feature, md5, on='Merchant_id', how='left')\n",
    "    new_data = pd.merge(new_data,merchant_feature,on='Merchant_id',how='left')\n",
    "    return new_data\n",
    "# 调用上边函数构建距离相关的特征属性\n",
    "new_data = Get_mer_dis(new_data)\n",
    "new_test_data = Get_mer_dis(new_test_data)\n",
    "new_data"
   ],
   "id": "a23ca7716597b546",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       1113008         1361    11166.0          20:1         0   \n",
       "1       1449506         1361    11166.0          20:1         1   \n",
       "2       1449506         1361    11166.0          20:1         1   \n",
       "3       4781321         1361    11166.0          20:1         0   \n",
       "4       4781321         1361    11166.0          20:1         0   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "128785  5389427         1184     1857.0        150:20         0   \n",
       "128786     6896         2511      869.0          50:5         0   \n",
       "128787  6598279         2846    11348.0        100:30         2   \n",
       "128788   287650         2123     1453.0          20:1        -1   \n",
       "128789   490662         5176     3923.0          20:5         7   \n",
       "\n",
       "        Date_received        Date  label  Dis_rate  Discount_type  ...  \\\n",
       "0          20160515.0  20160521.0      1  0.950000              1  ...   \n",
       "1          20160516.0  20160522.0      1  0.950000              1  ...   \n",
       "2          20160522.0  20160602.0      1  0.950000              1  ...   \n",
       "3          20160516.0  20160521.0      1  0.950000              1  ...   \n",
       "4          20160521.0  20160524.0      1  0.950000              1  ...   \n",
       "...               ...         ...    ...       ...            ...  ...   \n",
       "128785     20160521.0        null      0  0.866667              1  ...   \n",
       "128786     20160504.0        null      0  0.900000              1  ...   \n",
       "128787     20160522.0        null      0  0.700000              1  ...   \n",
       "128788     20160509.0        null      0  0.950000              1  ...   \n",
       "128789     20160418.0        null      0  0.750000              1  ...   \n",
       "\n",
       "        Coupon_popu  Merchant_popu  merchant_min_distance_x  \\\n",
       "0          0.000085       0.000085                      0.0   \n",
       "1          0.000085       0.000085                      0.0   \n",
       "2          0.000085       0.000085                      0.0   \n",
       "3          0.000085       0.000085                      0.0   \n",
       "4          0.000085       0.000085                      0.0   \n",
       "...             ...            ...                      ...   \n",
       "128785     0.000008       0.000008                      0.0   \n",
       "128786     0.000008       0.000008                      0.0   \n",
       "128787     0.000008       0.000008                      2.0   \n",
       "128788     0.000008       0.000008                      NaN   \n",
       "128789     0.000008       0.000008                      7.0   \n",
       "\n",
       "        merchant_max_distance_x  merchant_mean_distance_x  \\\n",
       "0                           1.0                       0.2   \n",
       "1                           1.0                       0.2   \n",
       "2                           1.0                       0.2   \n",
       "3                           1.0                       0.2   \n",
       "4                           1.0                       0.2   \n",
       "...                         ...                       ...   \n",
       "128785                      0.0                       0.0   \n",
       "128786                      0.0                       0.0   \n",
       "128787                      2.0                       2.0   \n",
       "128788                      NaN                       NaN   \n",
       "128789                      7.0                       7.0   \n",
       "\n",
       "        merchant_median_distance_x  merchant_min_distance_y  \\\n",
       "0                              0.0                      0.0   \n",
       "1                              0.0                      0.0   \n",
       "2                              0.0                      0.0   \n",
       "3                              0.0                      0.0   \n",
       "4                              0.0                      0.0   \n",
       "...                            ...                      ...   \n",
       "128785                         0.0                      0.0   \n",
       "128786                         0.0                      0.0   \n",
       "128787                         2.0                      2.0   \n",
       "128788                         NaN                      NaN   \n",
       "128789                         7.0                      7.0   \n",
       "\n",
       "        merchant_max_distance_y  merchant_mean_distance_y  \\\n",
       "0                           1.0                       0.2   \n",
       "1                           1.0                       0.2   \n",
       "2                           1.0                       0.2   \n",
       "3                           1.0                       0.2   \n",
       "4                           1.0                       0.2   \n",
       "...                         ...                       ...   \n",
       "128785                      0.0                       0.0   \n",
       "128786                      0.0                       0.0   \n",
       "128787                      2.0                       2.0   \n",
       "128788                      NaN                       NaN   \n",
       "128789                      7.0                       7.0   \n",
       "\n",
       "        merchant_median_distance_y  \n",
       "0                              0.0  \n",
       "1                              0.0  \n",
       "2                              0.0  \n",
       "3                              0.0  \n",
       "4                              0.0  \n",
       "...                            ...  \n",
       "128785                         0.0  \n",
       "128786                         0.0  \n",
       "128787                         2.0  \n",
       "128788                         NaN  \n",
       "128789                         7.0  \n",
       "\n",
       "[128790 rows x 32 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>...</th>\n",
       "      <th>Coupon_popu</th>\n",
       "      <th>Merchant_popu</th>\n",
       "      <th>merchant_min_distance_x</th>\n",
       "      <th>merchant_max_distance_x</th>\n",
       "      <th>merchant_mean_distance_x</th>\n",
       "      <th>merchant_median_distance_x</th>\n",
       "      <th>merchant_min_distance_y</th>\n",
       "      <th>merchant_max_distance_y</th>\n",
       "      <th>merchant_mean_distance_y</th>\n",
       "      <th>merchant_median_distance_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128785</th>\n",
       "      <td>5389427</td>\n",
       "      <td>1184</td>\n",
       "      <td>1857.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128786</th>\n",
       "      <td>6896</td>\n",
       "      <td>2511</td>\n",
       "      <td>869.0</td>\n",
       "      <td>50:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160504.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128787</th>\n",
       "      <td>6598279</td>\n",
       "      <td>2846</td>\n",
       "      <td>11348.0</td>\n",
       "      <td>100:30</td>\n",
       "      <td>2</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128788</th>\n",
       "      <td>287650</td>\n",
       "      <td>2123</td>\n",
       "      <td>1453.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160509.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128789</th>\n",
       "      <td>490662</td>\n",
       "      <td>5176</td>\n",
       "      <td>3923.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>7</td>\n",
       "      <td>20160418.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>128790 rows × 32 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 47
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:34:26.569639Z",
     "start_time": "2024-09-19T03:34:26.294359Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "# 距离柱状图\n",
    "x = np.arange(-1,11)\n",
    "dis1 = np.array(new_data['Distance'].value_counts().sort_index())\n",
    "dis2 = np.array(new_test_data['Distance'].value_counts().sort_index())\n",
    "plt.bar(x,dis1,tick_label=x, label='off_train_data', width=0.3)\n",
    "plt.bar(x+0.3,dis2,label='off_test_data',width=0.3)\n",
    "plt.xlabel('距离')\n",
    "plt.ylabel('计数')\n",
    "plt.title('距离计数分布情况')\n",
    "plt.legend()\n",
    "plt.show()"
   ],
   "id": "44389d82736e5e28",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHDCAYAAADIo3XgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABJDElEQVR4nO3de1xUdeL/8fcwgKIE3hI185Y6iuIt+epX01DJddXMS3bbLn4rk7X91galoa2alImWX9tcczUty1VzvVBGluW2mdfV9Ua1gJGpeL+FDAojw/z+8MfkCHIL5oye1/Px4JEznzPnvGcg5s05nznH4nK5XAIAADAhP6MDAAAAGIUiBAAATIsiBAAATIsiBAAATIsiBAAATIsiBAAATIsiBAAATIsiBAAATIsiBAAATIsiBKBcHA6H8vLyrjl+4cIFzZ8/X99++22Z13np0qVrju3fv19btmwp03r+85//aN++fUXuz8jIKHMW6fJzvPLfmzZtKtfjC73yyitKTk4u8/J2u107d+702P6V9u7dq1OnTl3z8SV9XwAUjyIEmFhGRoZsNpsiIiIUERGh9u3bq2fPnpKk9u3by2azFfmKiIjQ1KlT5XK5in3jDQoK0po1a/TBBx8UGXM6nbp48aKuvLLPRx99pGHDhunMmTPFZly/fr1mzZp1zefw9ddfKyYmRpcuXdKyZcv07rvvSpJGjhypnTt3qqCgQMOHD9eSJUvK9JocO3ZMffr00datWyVJ33//vZ544gnt3r27TI8vdOLECS1ZskSZmZllfsyPP/6o3/3ud8rOzpYknTt3TllZWcrJyVFOTo6efvppffHFF8rJyZHdbteZM2fcJfLMmTMaPHiw1q1b517flClTiv0eFn7NmDGjXM8JuBH5Gx0AgHECAgIkSSkpKZKk7du3a/z48ZKkwMBALViwQF26dPF4TOEb79GjRzVo0CAFBAQoICBAFovFY7lNmza5S5UkFRQU6NKlS8rPz1dycrJuueUWSVLfvn313nvvadSoUVq8eLHq1KnjsR5/f393zuJ069ZNc+bM0aJFixQYGKiAgAB9/fXXOnnypDp06KCMjAzl5uaqT58+ZXpN5s+fr/z8fLVv316S1KlTJ/Xp00fTpk3TsmXL5O9f9Nem3W6X1WpVYGCgrFarJGnp0qUKDg7Www8/XGT5goIC5efn69KlS6pZs6b7/sJ/V6tWTZL01FNPaf/+/bJarbJYLLLb7ZoxY4ZmzZolp9Mph8OhDz/8UO3bt1edOnXUsmVLvfTSS2rfvr1uvfVWBQYG6vbbb9eCBQuKZBg8eLACAwPL9JoANzKKEGBixb2pF97n5+engIAA95tyocLbwcHB2rNnj/v+n3/+WfPmzVNkZKR69uypwMBArVy5UkuXLtVLL72krl27Fpvhpptu0oIFCzR8+HDFx8frr3/9q8f41QXrat98840GDhyo2rVra/fu3crJyVFGRob69eun7du368CBA2rVqpW7eEmXDyH5+/u7S0uhgwcPauXKlXr++ed10003ue8fP3687rnnHs2dO1fPPPNMkQxDhgzRkSNHis13dZG8UseOHbVixQr37cLXNi8vT3a7Xe+//74uXryowMBAWSwWDR48WGPHjtXAgQPdhbRWrVru1ykxMVEDBw7UCy+8oL/97W/y8/OT1Wr1KFuFLBZLkecPmBFFCDCx/Px8SdLOnTslSenp6SooKCjXOiZMmKB69erpd7/7nVq3bq3PPvtM8fHxCg0N1fnz5/Xmm2+qa9eu2rdvn1566SV9/PHHRdZRr149zZ07V3Xr1i33c0hOTtaZM2d07NgxHT58WPXr19fmzZvldDrl5+engwcPav/+/bLZbB6P+9vf/uZRzgoKCjR+/Hg1btxYDz30kMeyzZs3V2xsrKZPn64GDRrovvvu8xh/9913ZbFY3HuEZs6cqe3bt2vp0qU6cuSIMjIyFB0dXST7lXu6HnjgAQ0YMECStHjxYu3bt08DBgzQK6+8ooCAAFmtVtntdr366qtKTEyUw+FQp06d9P7777vXERISotjYWB08eFAWi6XUEgmAIgSYWkBAgKKiorRgwQJt27ZNbdu29SgHv/vd74o85re//a1mz57tvu1wOFRQUKCTJ0/q+++/1759+9SrVy9169ZNa9eu1fPPP6+HHnpI3bt31+HDhz3WtWfPHvdekMDAQDVs2FAnTpzwOMSUl5engoICnT9/XpLcc5Pq1q0rq9Wq2bNn64cfftCjjz6qZs2aKTw8XPXq1dOzzz4rh8OhXr16ae7cuerevbvOnDmju+66S59++qluvfVWjyxvv/22vv32Wy1durTYQ3GjRo3S4cOH9ac//UkHDhzQc8895z601LRpU/dy+/bt09q1a/XWW2/plltu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I2rdurWioqLUpEkT1a1bVy+//LJycnKuuSckNTVVtWvX1rvvvlvkEI7L5Sp1L0tYWJjCw8O1YsUK3X777Xrqqae0YsUKHTx4UElJSZo7d64mTpyo9957T0888YTmzJnjUUSysrK0ZMkSzZs3T126dPG4tllycrLS0tK0evVqdezYsdTX1WKxeOxhKZwzJUmnTp1ScnKyRo4cWeyetsLXp3D5wv+uX7++yB6hfv36edyuVauWnnrqKXXo0EFZWVmaO3euFi9erLFjx3rMm7Jardq+fbvq1Kmjzz//XD///LPHWbcBs6EIASZVOHn2xRdfVM+ePYucYLBatWp6+eWXizyuoKBANWrU0KZNmzyuGj9r1iz3ZOOrJSQkaOHChdq1a1ex17eKjY3VY489pttuu63IWF5e3jX3shQUFGjJkiX6/PPPlZGRodGjR+uxxx6Tv7+/O392drbmzZun7t27q1evXnr88cc1cOBAffDBB2rVqpUk6c0339Tq1av1hz/8QU888YRHkbFYLFq9erW6d++uF154odgcV3rnnXc8bjudTvchqNGjR+upp5665mMvXLgg6ZfruV3rhIjr1q3T6dOnPSau33PPPZIuX3x14MCBcjgcmjx5cpETOd53331asWKFFi5cqODgYP3xj38s02FI4EZlcZXlgDYAFOOPf/yjbr75Zvdk6WspKChQ79695efnpzFjxlzzE2UV8dlnnyk7O1uDBg1SjRo13PefPn1aK1eu1KOPPupx//nz5/X111+7J3BLlwvH6dOnK32ys3T5pJTvvPOONm3aVOqy+/bt0+OPP67PPvtM9erV06lTp3THHXcU+fh8bGys7Ha7/u///q/YQ3VbtmyRzWar0CVLALOhCAHwivz8fCblAvA5FCEAAGBaJZ+tCwAA4AZGEQIAAKZFEQIAAKbFzMVSFBQUKD8/X35+fkVOcQ8AAHyTy+VSQUGB/P39S7xuH0WoFPn5+UpJSTE6BgAAqICIiIhiz19WiCJUisIWGRER4XHysqridDqVkpLite2VB9kqhmwV46vZfDWXRLaKIlvF+HI26Zd8Je0NkihCpSo8HGa1Wr36jfb29sqDbBVDtorx1Wy+mksiW0WRrWJ8OZukUqe1MFkaAACYFkUIAACYFkUIAACYFnOEAABe53K5lJ+fL6fTaXQUd4bc3Fyfm+tCtmuzWq3y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qW/fvurUqZOefPJJnTt3TpI0YMAA2Ww2SVK/fv1ks9mUnJxcpuf9l7/8Rd27d9ddd92l77//3mNs5cqVioqKUufOnTV27FjZ7fYybW/ZsmW68847izzOCBQhAABKkZOTo8cff1w9e/bUxx9/rIYNG2rs2LG66667tGPHDo0ePVqDBw/Wjh073NcK69+//zXHSjJhwgTt2LFDXbp00aRJk/T1118rPj5eknT+/HmNHj1ad955p9auXauLFy9q+vTp7owTJkxQXFyckpOT5e/vr0WLFkm6XFh27Ngh6XJZ2rFjh/r3719qlg0bNmjx4sV66623lJiYqLVr17rH0tLSlJiYqGnTpmndunU6e/asli5dWur20tLSlJCQoNdee63I44zAoTEAAErx1VdfqWbNmvrDH/4gSXrppZfUvXt3ff/99+rUqZOqVaumgIAAhYSEuB8TEBCggICAYsdKUr16dVWvXl3+/v6qXr26brrpJveV1b/66isFBATo6aeflsVi0ahRozRu3DhJktVqlb+/vxwOh+rWrau3337bfRmM4OBg9/qDg4PLnOXLL7/U3XffrcjISEnSvffe657s3axZM61fv14hISFKSUmRy+XSTz/9VOr2mjVrpk2bNikgIED79u3zeJwRKEIAAJTi2LFjHhN+AwMDVb9+fR07dkydOnXyWo4TJ07o7Nmz7mJSUFCgnJwc5eXlqXr16nrzzTc1b948TZ061b1HqWnTphXe3smTJ9W9e3f37VtvvdVdhHJzc5WQkKBdu3apbdu2slqtKigoKHWdubm5eumll7Rjx45yPa6qUIQAAChFo0aNlJmZ6b6dl5enkydPqlGjRlW2TYvFUuTCpg0aNFD79u01a9YsSZcvfGq32+Xv769z584pJCREy5cv14ULFzR58mS99tprmjdvXonrLEndunV18uRJ9+1jx465//3+++/r3Llz2rRpk6pVq6YZM2bo7NmzpT6H999/X2fPntXmzZsVGBhY7OO8iTlCAADfUK+11LBj1X/Va13uaFFRUcrJydGcOXN05MgRvfrqq2rWrJkiIiKq4IW4rGnTptq6datOnTqlLVu2yOl0KioqSkePHtW+fftktVr16aef6sknn5TL5dK5c+c0atQobdy4UXa7XX5+fkX2tDRt2lRff/21Tpw44Z7DU5J+/fpp7dq12rVrl/bu3asV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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 46
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:40:03.305560Z",
     "start_time": "2024-09-19T03:40:03.155534Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义变换距离类型的函数\n",
    "def get_distance_type(row):\n",
    "    # 距离未知\n",
    "    if row == -1:\n",
    "        return -1\n",
    "    # 1千米内\n",
    "    elif row >= 0 and row <= 2:\n",
    "        return 0\n",
    "    # 1.5-2.5千米内\n",
    "    elif row >= 3 and row <= 5:\n",
    "        return 1\n",
    "    # 3-4.5千米内\n",
    "    elif row >= 6 and row <= 9:\n",
    "        return 2\n",
    "    # 5千米\n",
    "    elif row == 10:\n",
    "        return 3\n",
    "# 构建距离类型的特征属性\n",
    "new_data['Distance_type'] = new_data['Distance'].apply(get_distance_type)\n",
    "new_test_data['Distance_type'] = new_test_data['Distance'].apply(get_distance_type)\n",
    "# 新距离类型分布情况\n",
    "new_data['Distance_type'].value_counts()\n",
    "new_test_data['Distance_type'].value_counts()\n",
    "new_data\n",
    "# '''\n",
    "#  0    84309\n",
    "# -1    13858\n",
    "#  3    13321\n",
    "#  1    11194\n",
    "#  2     6108\n",
    "# Name: Distance_type, dtype: int64\n",
    "# '''\n"
   ],
   "id": "8f1065dc25ee393",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       1113008         1361    11166.0          20:1         0   \n",
       "1       1449506         1361    11166.0          20:1         1   \n",
       "2       1449506         1361    11166.0          20:1         1   \n",
       "3       4781321         1361    11166.0          20:1         0   \n",
       "4       4781321         1361    11166.0          20:1         0   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "128785  5389427         1184     1857.0        150:20         0   \n",
       "128786     6896         2511      869.0          50:5         0   \n",
       "128787  6598279         2846    11348.0        100:30         2   \n",
       "128788   287650         2123     1453.0          20:1        -1   \n",
       "128789   490662         5176     3923.0          20:5         7   \n",
       "\n",
       "        Date_received        Date  label  Dis_rate  Discount_type  ...  \\\n",
       "0          20160515.0  20160521.0      1  0.950000              1  ...   \n",
       "1          20160516.0  20160522.0      1  0.950000              1  ...   \n",
       "2          20160522.0  20160602.0      1  0.950000              1  ...   \n",
       "3          20160516.0  20160521.0      1  0.950000              1  ...   \n",
       "4          20160521.0  20160524.0      1  0.950000              1  ...   \n",
       "...               ...         ...    ...       ...            ...  ...   \n",
       "128785     20160521.0        null      0  0.866667              1  ...   \n",
       "128786     20160504.0        null      0  0.900000              1  ...   \n",
       "128787     20160522.0        null      0  0.700000              1  ...   \n",
       "128788     20160509.0        null      0  0.950000              1  ...   \n",
       "128789     20160418.0        null      0  0.750000              1  ...   \n",
       "\n",
       "        Merchant_popu  merchant_min_distance_x  merchant_max_distance_x  \\\n",
       "0            0.000085                      0.0                      1.0   \n",
       "1            0.000085                      0.0                      1.0   \n",
       "2            0.000085                      0.0                      1.0   \n",
       "3            0.000085                      0.0                      1.0   \n",
       "4            0.000085                      0.0                      1.0   \n",
       "...               ...                      ...                      ...   \n",
       "128785       0.000008                      0.0                      0.0   \n",
       "128786       0.000008                      0.0                      0.0   \n",
       "128787       0.000008                      2.0                      2.0   \n",
       "128788       0.000008                      NaN                      NaN   \n",
       "128789       0.000008                      7.0                      7.0   \n",
       "\n",
       "        merchant_mean_distance_x  merchant_median_distance_x  \\\n",
       "0                            0.2                         0.0   \n",
       "1                            0.2                         0.0   \n",
       "2                            0.2                         0.0   \n",
       "3                            0.2                         0.0   \n",
       "4                            0.2                         0.0   \n",
       "...                          ...                         ...   \n",
       "128785                       0.0                         0.0   \n",
       "128786                       0.0                         0.0   \n",
       "128787                       2.0                         2.0   \n",
       "128788                       NaN                         NaN   \n",
       "128789                       7.0                         7.0   \n",
       "\n",
       "        merchant_min_distance_y  merchant_max_distance_y  \\\n",
       "0                           0.0                      1.0   \n",
       "1                           0.0                      1.0   \n",
       "2                           0.0                      1.0   \n",
       "3                           0.0                      1.0   \n",
       "4                           0.0                      1.0   \n",
       "...                         ...                      ...   \n",
       "128785                      0.0                      0.0   \n",
       "128786                      0.0                      0.0   \n",
       "128787                      2.0                      2.0   \n",
       "128788                      NaN                      NaN   \n",
       "128789                      7.0                      7.0   \n",
       "\n",
       "        merchant_mean_distance_y  merchant_median_distance_y  Distance_type  \n",
       "0                            0.2                         0.0              0  \n",
       "1                            0.2                         0.0              0  \n",
       "2                            0.2                         0.0              0  \n",
       "3                            0.2                         0.0              0  \n",
       "4                            0.2                         0.0              0  \n",
       "...                          ...                         ...            ...  \n",
       "128785                       0.0                         0.0              0  \n",
       "128786                       0.0                         0.0              0  \n",
       "128787                       2.0                         2.0              0  \n",
       "128788                       NaN                         NaN             -1  \n",
       "128789                       7.0                         7.0              2  \n",
       "\n",
       "[128790 rows x 33 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>...</th>\n",
       "      <th>Merchant_popu</th>\n",
       "      <th>merchant_min_distance_x</th>\n",
       "      <th>merchant_max_distance_x</th>\n",
       "      <th>merchant_mean_distance_x</th>\n",
       "      <th>merchant_median_distance_x</th>\n",
       "      <th>merchant_min_distance_y</th>\n",
       "      <th>merchant_max_distance_y</th>\n",
       "      <th>merchant_mean_distance_y</th>\n",
       "      <th>merchant_median_distance_y</th>\n",
       "      <th>Distance_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128785</th>\n",
       "      <td>5389427</td>\n",
       "      <td>1184</td>\n",
       "      <td>1857.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128786</th>\n",
       "      <td>6896</td>\n",
       "      <td>2511</td>\n",
       "      <td>869.0</td>\n",
       "      <td>50:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160504.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128787</th>\n",
       "      <td>6598279</td>\n",
       "      <td>2846</td>\n",
       "      <td>11348.0</td>\n",
       "      <td>100:30</td>\n",
       "      <td>2</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128788</th>\n",
       "      <td>287650</td>\n",
       "      <td>2123</td>\n",
       "      <td>1453.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160509.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128789</th>\n",
       "      <td>490662</td>\n",
       "      <td>5176</td>\n",
       "      <td>3923.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>7</td>\n",
       "      <td>20160418.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>128790 rows × 33 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 49
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:40:47.753241Z",
     "start_time": "2024-09-19T03:40:47.549095Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 距离柱状图\n",
    "x1 = np.arange(-1,4)\n",
    "dis_type1 = np.array(new_data['Distance_type'].value_counts().sort_index())\n",
    "dis_type2 = np.array(new_test_data['Distance_type'].value_counts().sort_index())\n",
    "plt.bar(x1,dis_type1,tick_label=x1, label='off_train_data', width=0.3)\n",
    "plt.bar(x1+0.3,dis_type2,label='off_test_data',width=0.3)\n",
    "plt.xlabel('距离类型')\n",
    "plt.ylabel('计数')\n",
    "plt.title('距离类型计数分布情况')\n",
    "plt.legend()\n",
    "plt.show()"
   ],
   "id": "b045ffc8192b50fb",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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7XvD/cE1sB9cA/vhX7Z+BqIEofz8fMTGxqJZs2a4dOkStm7dik8//RQdO3aEj4+PMJ9MJoNcLkdubi4MBoPd27Rarc016/X6u9xq+3PFmmoajUYDX19fsctwqvT0dBQWFopdht1xf3AN7AfXwH6wnShB6IcffkBhYSHWrl2LevXqYcKECRgyZAgSExMxcuRIq3nd3NxQVFQEhUIBtVpt17bqBCE/Pz+XOXJgMpmg1+tdqiaqOXQ6ndgl2BX3B9fAfnAN7Id/lX8WtyNKELp06RI6dOiAevXqlRWhVEKn0+Hvv/9Gdna21bz5+flQqVTQarU4efKkXduqQ6FQuNyXyhVrItd3r35nuD+4BvaDa2A/2E6UwdLe3t4oLi62mnbhwgVMnToVR48eFaZlZWXBaDRCq9XCz8/P7m1EREQkbaIEod69eyMzMxMbN27EpUuXsG7dOvz555/o0aMH8vLykJycDACIi4tDt27doFAoEBQUZPc2IiIikjZRTo3Vq1cPK1euxMKFC7Fw4ULUr18fH3zwAZo1a4aoqCiEh4cjJiYGJpMJ8fHxZYUqlXZvIyIiImkT7fL5gIAAbNq0qcL04OBg7NixA3q9HoGBgfD09HRoGxEREUmXaEGoKl5eXvDy8nJaGxEREUmT6M8aIyIiIhILgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSZYoQSgqKgo6nU746d+/PwAgIyMDISEhCAoKQnR0NCwWi7CMI9qIiIhI2kQJQsePH0dcXBwOHDiAAwcOYMuWLTAajQgNDUW7du2QmJiIzMxMJCUlAYBD2oiIiIicHoRKS0uRkZGBTp06oW7duqhbty5q166N1NRUGAwGREREoGnTpggLC0NCQgIAOKSNiIiISOnsFaanp8NisWD48OG4fPkygoKCEBUVhbS0NPj7+0Oj0QAAdDodMjMzAcAhbdVlMpnufKPtrLwWV6qpJlMoFGKX4FT32veG+4NrYD+4BvbDv2z9DJwehDIzM9G6dWvMmDED9913H+bNm4eZM2eiVatW8PHxEeaTyWSQy+XIzc2FwWCwe5tWq61W3Xq9/i622jFcsaaaRqPRwNfXV+wynCo9PR2FhYVil2F33B9cA/vBNbAfbOf0IDR06FAMHTpUeP3uu+8iODgYLVu2hFqttprXzc0NRUVFUCgUdm+rbhDy8/NzmSMHJpMJer3epWqimkOn04ldgl1xf3AN7AfXwH74V/lncTtOD0L/VbduXZjNZtSvXx8nT560asvPz4dKpYJWq7V7W3UpFAqX+1K5Yk3k+u7V7wz3B9fAfnAN7AfbOX2w9IIFC/Dtt98Kr/V6PeRyOXQ6HY4ePSpMz8rKgtFohFarhZ+fn93biIiIiJwehB566CHExsbiwIED2Lt3L6KiojBixAh0794deXl5SE5OBgDExcWhW7duUCgUCAoKsnsbERERkdNPjQ0fPhyZmZmYOHEiatWqheDgYISFhUGpVCIqKgrh4eGIiYmByWRCfHx8WZEOaCMiIiISZYxQeHg4wsPDK0wPDg7Gjh07oNfrERgYCE9PT4e2ERERkbSJPlj6v7y8vODl5eW0NiIiIpIuPnSViIiIJItBiIiIiCSLQYiIiIgki0GIiIiIJItBiIiIiCSr2kHIaDRi5syZVc6zcuVKXLp06Y6LIiIiInKGal8+r1KpsHXrVly8eBFeXl5o0aIFOnbsiA4dOkCpVGLPnj1YtmwZevXqBW9vb0fUTERERGQX1Q5CMpkM9erVw/PPP4+rV68iKysLsbGxOHPmDAYOHIgtW7Zg0aJFaNOmjSPqJSIiIrIbm4NQYmIivLy8EBQUBHd3d/Ts2VNo0+v1iImJwaZNm9CxY0cEBwc7pFgiIiIie7J5jNDx48cRExODoKAgXLt2DR9++CHCw8PRt29fzJs3D0OHDsW+ffug1Wrx/vvvO7JmIiIiIruw+YhQ+QDpjIwMJCcn49ixY9i3bx9efvllTJo0SZgvKioKQ4cOxaBBg6DT6exfMREREZGd2HxEaOHChYiIiEBqaipu3LiB6OhoDBs2DM2aNUNoaCi+++47FBQU4IUXXkBoaCguX77syLqJiIiI7prNQSgsLAxdu3ZFQUEB5HI5wsPD0atXL4wcORJHjhxBcnIy+vfvj4ceegijR49Gr169HFk3ERER0V2z+dTYm2++CZVKhezsbFy7dg0tWrTAjh070LFjR2i1Wnz66ad48803sWfPHly9ehUNGjRwZN1EREREd83mI0KPPfYYHn/8cXTq1Alnz56Fu7s7BgwYgKeffhr//PMPDh06hHPnzmHy5MmYP3++I2smIiIisgubg9DDDz+MVatWoVatWggODsaFCxfg7u6OlJQUAEBMTAy8vb0xaNAgnDt3DmfOnHFUzURERER2YfOpsb179+KVV16BTCbDX3/9hXfffRfPPPMMNm/eDHd3d2zatAlXrlwBAAwaNAiHDx9G8+bNHVU3ERER0V2zOQiNGjUKAFBSUoIePXrg+vXr+PTTT3HfffchNjYWANCwYUMAwFNPPQUPDw/7V0tERERkR9V+6KpKpYJGo8HQoUPRunVryOVydOzY0WoehiAiIiKqCaodhICy5425ubnZuxYiIiIip7qjIASUhSEiIiKimszmMULvv/8+1Gq18LqoqAhLly6tdN7i4mKEh4fffXVEREREDmRzEDIajbBYLMJri8WC4uLiSuctKSm5+8qIiIiIHMzmIDRt2jSr1wkJCTzqQ0RERDXaHY8RuvnoEBEREVFNdEdByGKxoKCgQHhtMBjwwgsvICMjw26FERERETlatYLQ9evX8d1330Emk2HVqlXC9Nq1a2Po0KEYN24c/vzzT7sXSUREROQINo8Rys3NxdixY9GxY0d0794d8+fPh1KphEKhAFB2lKikpAQvvPACVq1aBT8/P4cVTURERGQPNgeh+fPno3v37pg2bRpycnKQm5uLhQsXWs1jMpmQmZnJZ4wRERFRjWDzqbGpU6cKV45ZLBao1Wp07tzZ6ueRRx7BmDFjUKdOHZsLeOmll5CUlAQAyMjIQEhICIKCghAdHW01INsRbURERCRtNgchT09P4f/d3d0RGhp61yvftm0bdu/eDaDsPkWhoaFo164dEhMTkZmZKQQkR7QRERER3dFVYx4eHhg+fPhdrfiff/5BdHQ0WrRoAQBITU2FwWBAREQEmjZtirCwMCQkJDisjYiIiMjmMUL2Fh0djeDgYOHu1GlpafD394dGowEA6HQ6ZGZmOqytukwm0x1uqf2V1+JKNdVk5QP+peJe+95wf3AN7AfXwH74l62fgShBaN++fdi7dy+++eYbvPfeewDK7kXk4+MjzCOTySCXy5Gbm+uQNq1WW62a9Xr9nW6uw7hiTTWNRqOBr6+v2GU4VXp6OgoLC8Uuw+64P7gG9oNrYD/YzulBqLi4GLNmzcLs2bNRu3ZtYbpCobB6qCsAuLm5oaioyCFt1Q1Cfn5+LnPkwGQyQa/Xu1RNVHPodDqxS7Ar7g+ugf3gGtgP/yr/LG7H6UFo+fLlaN++PXr37m01XavV4uTJk1bT8vPzoVKpHNJWXQqFwuW+VK5YE7m+e/U7w/3BNbAfXAP7wXZOD0Jff/01cnJy0KlTJwBAUVERtm/fjgceeAClpaXCfFlZWTAajdBqtfDz87Ma5GyPNiIiIqI7fujqndqwYQO+/vprJCcnIzk5GX379sWbb76J+Ph45OXlITk5GQAQFxeHbt26QaFQICgoyO5tRERERE4/IuTt7W312sPDA/fddx88PT0RFRWF8PBwxMTEwGQyIT4+vqxIpdLubURERESiXT5f7ubHdAQHB2PHjh3Q6/UIDAy0uomjI9qIiIhI2kQPQv/l5eUFLy8vp7URERGRdDl9jBARERGRq2AQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIskSNQjl5OTg0KFDyM7OFrMMIiIikijRglBKSgoGDBiAuXPnok+fPkhJSQEAZGRkICQkBEFBQYiOjobFYhGWcUQbERERSZcoQejGjRuIiorCF198geTkZMyZMweLFy+G0WhEaGgo2rVrh8TERGRmZiIpKQkAHNJGRERE0iZKEMrPz0dkZCTatGkDAGjbti1yc3ORmpoKg8GAiIgING3aFGFhYUhISAAAh7QRERGRtCnFWGmjRo0wdOhQAEBJSQlWr16NAQMGIC0tDf7+/tBoNAAAnU6HzMxMAHBIW3WYTKa72GL7Kq/FlWqqyRQKhdglONW99r3h/uAa2A+ugf3wL1s/A1GCULm0tDQ8//zzUKlU2L59O5YvXw4fHx+hXSaTQS6XIzc3FwaDwe5tWq3W5lr1ev1dbq39uWJNNY1Go4Gvr6/YZThVeno6CgsLxS7D7rg/uAb2g2tgP9hO1CCk0+mwZs0aREdHIyIiAs2bN4darbaax83NDUVFRVAoFHZvq04Q8vPzc5kjByaTCXq93qVqoppDp9OJXYJdcX9wDewH18B++Ff5Z3E7ogYhmUwGX19fLFy4EH369EFYWBhOnjxpNU9+fj5UKhW0Wq3d26pDoVC43JfKFWsi13evfme4P7gG9oNrYD/YTpTB0nv37kV0dLTwuryzWrZsiaNHjwrTs7KyYDQaodVq4efnZ/c2IiIikjZRglDLli3x5Zdf4ssvv8TFixexZMkSdO/eHb1790ZeXh6Sk5MBAHFxcejWrRsUCgWCgoLs3kZERETSJsqpMS8vL3z44YdYsGABoqOj0aNHDyxatAhKpRJRUVEIDw9HTEwMTCYT4uPjywp1QBsRERFJm2hjhHr27ImePXtWmB4cHIwdO3ZAr9cjMDAQnp6eDm0jIiIi6RJ1sPSteHl5wcvLy2ltREREJE18+jwRERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUkWgxARERFJFoMQERERSRaDEBEREUmWaEFo586d6NevH3x9ffHkk08iMzMTAJCRkYGQkBAEBQUhOjoaFotFWMYRbURERCRdogShc+fOITIyEuHh4UhNTUXjxo0xffp0GI1GhIaGol27dkhMTERmZiaSkpIAwCFtREREJG2iBKHMzExMmjQJAwcORP369fH000/jjz/+QGpqKgwGAyIiItC0aVOEhYUhISEBABzSRkRERNKmFGOlffr0sXp9+vRpNGvWDGlpafD394dGowEA6HQ64ZSZI9qqw2Qy3cGWOkZ5La5UU02mUCjELsGp7rXvDfcH18B+cA3sh3/Z+hmIEoRuZjQasXr1aowdOxbnz5+Hj4+P0CaTySCXy5GbmwuDwWD3Nq1Wa3Oder3+LrfU/lyxpppGo9HA19dX7DKcKj09HYWFhWKXYXfcH1wD+8E1sB9sJ3oQio2NhYeHB0aNGoXY2Fio1Wqrdjc3NxQVFUGhUNi9rTpByM/Pz2WOHJhMJuj1epeqiWoOnU4ndgl2xf3BNbAfXAP74V/ln8XtiBqE9uzZg02bNmHz5s1QqVTQarU4efKk1Tz5+fkOa6sOhULhcl8qV6yJXN+9+p3h/uAa2A+ugf1gO9Eunz9//jzeeecdzJ49G61atQJQdtTl6NGjwjxZWVkwGo3QarUOaSMiIiJpEyUIFRUVYcKECQgODka/fv2Qn5+P/Px8dOrUCXl5eUhOTgYAxMXFoVu3blAoFAgKCrJ7GxEREUmbKKfGdu/ejczMTGRmZmLz5s3C9B9//BFRUVEIDw9HTEwMTCYT4uPjywpVKu3eRkRERNImShAKDg5Genp6pW0+Pj7YsWMH9Ho9AgMD4enpabWcvduIiIhIukS/aqwyXl5e8PLyclobERERSRMfukpERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgVENpNBqxSyAiIqrxGIREZDJb7mg5hUIBX19fKBQKp66XiIjoXqMUuwApU8hleGvTYZy6YnDaOls1rI0Pn+rotPUREZFz8YxB9TAIiezUFQOOX7ghdhlERORCTGYLFHJZtZcrP2Pg7PXWZAxCRCRtZhMgv7PTzDVqnVSj8IyB8zAIEZG0yRVA4svAtQznrK9+GyBkpXPWRTUazxg4B4MQEdG1DODiUbGrICIR8KoxIiIikiwGIYlpUNutbHyCs4mxTiIiotvgqTGJqatRckwEERHR/8cgJFUcE0FERMRTY0RU8/EGckR0p3hEiIhcglg3kCMiaRMtCOXk5CAkJATr1q2Dj48PACAjIwMRERE4d+4cnnjiCUyZMgUymcxhbUTkOsS4gVxvXQNMfrSt09ZHRK5HlFNj2dnZCA0Nxd9//y1MMxqNCA0NRbt27ZCYmIjMzEwkJSU5rI2IXE/5DeSc9XM+u0DsTSYikYkShMLCwjBw4ECraampqTAYDIiIiEDTpk0RFhaGhIQEh7URERHRv6R6exVRTo1FRUWhSZMmmD9/vjAtLS0N/v7+wqBHnU6HzMxMh7VVl8lk/45SKKT1rCFHfIb2wH5wDeyHmq18e+617RKLGPuDmLdXccT3xtb3FCUINWnSpMI0g8EgjBUCAJlMBrlcjtzcXIe0abXaatWs1+urNf/taDQayQ3wTE9PR2FhodhlWGE/uAb2w73D3v9WSpHo+4MIt1cRc39wmavGFAoF1Gq11TQ3NzcUFRU5pK26QcjPz09yf7Ham06nE7sEAvvBVdxr/WAymaDX6/lvJd0RR+wP5d/J23GZIKTVanHy5Emrafn5+VCpVA5pqy6FQsGd+y7x83MN7AfXcK/2A/+tpDsh5nfGZW6o6Ofnh6NH/z0Ul5WVBaPRCK1W65A2IiIiIpcJQkFBQcjLy0NycjIAIC4uDt26dYNCoXBIGxEREZHLnBpTKpWIiopCeHg4YmJiYDKZEB8f77A2IiIiIlGDUHp6utXr4OBg7NixA3q9HoGBgfD09HRoGxEREUmbyxwRKufl5QUvLy+ntREREZF0ucwYISIiIiJnYxAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiIiyWIQIiIiIsliECIiIiLJYhAiIiK70Gg0d76w2WS/Qlx5neRyXO6GikREJB6T2QKFXFbt5RQKBXx9fe98xXIFkPgycC3jzt+jOuq3AUJWOmdd5NIYhIiISKCQy/DWpsM4dcXgtHX21jXA5EfbloWgi0edtl4igEGIiIj+49QVA45fuOG09T3YoJbT1kX0XxwjRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREkiWZIJSRkYGQkBAEBQUhOjoaFotF7JKIiIhIZJIIQkajEaGhoWjXrh0SExORmZmJpKQkscsiIiIikUkiCKWmpsJgMCAiIgJNmzZFWFgYEhISxC6LiIiIRKYUuwBnSEtLg7+/PzQaDQBAp9MhMzPTpmXLT6EZjUYoFAq71qVQKPCQdy242fdtq9T8fg1MJhPQoB0gd3POSu9vBZhMZet1QewH18B+cA3sB9fAfrh75e95u6EwMosEBsssXLgQxcXFmDVrljCta9eu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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 50
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:41:31.051097Z",
     "start_time": "2024-09-19T03:41:30.964065Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 跟距离相关的独热编码\n",
    "def Get_dis_hot(df):\n",
    "    discols = ['Distance' + str(i) for i in range(-1,11)]\n",
    "    tmpdf = pd.get_dummies(df['Distance'].replace('null', np.nan))\n",
    "    tmpdf.columns = discols\n",
    "    df[discols] = tmpdf\n",
    "    return df\n",
    "new_data = Get_dis_hot(new_data)\n",
    "new_test_data = Get_dis_hot(new_test_data)\n",
    "# 集成新的数据集后，对缺失值处理\n",
    "new_data = new_data.fillna(-1)\n",
    "new_test_data = new_test_data.fillna(-1)\n",
    "new_data.isnull().sum()\n",
    "new_test_data.isnull().sum()\n",
    "# 再次保存最终文件，方便下次直接读取进行预测操作\n",
    "# '''\n",
    "# new_data.to_csv('./final_new_data.csv')\n",
    "# new_test_data.to_csv('./final_new_test_data.csv')\n",
    "# # 读取最终保存的文件\n",
    "# new_data = pd.read_csv('./final_new_data.csv',index_col=0)\n",
    "# new_test_data = pd.read_csv('./final_new_test_data.csv',index_col=0)\n",
    "# '''"
   ],
   "id": "2420b89be6cdf90e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "User_id                       0\n",
       "Merchant_id                   0\n",
       "Coupon_id                     0\n",
       "Discount_rate                 0\n",
       "Distance                      0\n",
       "Date_received                 0\n",
       "Dis_rate                      0\n",
       "Discount_type                 0\n",
       "Discount_man                  0\n",
       "Discount_jian                 0\n",
       "Weekday                       0\n",
       "Is_weekend                    0\n",
       "weekday1                      0\n",
       "weekday2                      0\n",
       "weekday3                      0\n",
       "weekday4                      0\n",
       "weekday5                      0\n",
       "weekday6                      0\n",
       "weekday7                      0\n",
       "rec_coupon                    0\n",
       "Coupon_popu                   0\n",
       "Merchant_popu                 0\n",
       "merchant_min_distance_x       0\n",
       "merchant_max_distance_x       0\n",
       "merchant_mean_distance_x      0\n",
       "merchant_median_distance_x    0\n",
       "merchant_min_distance_y       0\n",
       "merchant_max_distance_y       0\n",
       "merchant_mean_distance_y      0\n",
       "merchant_median_distance_y    0\n",
       "Distance_type                 0\n",
       "Distance-1                    0\n",
       "Distance0                     0\n",
       "Distance1                     0\n",
       "Distance2                     0\n",
       "Distance3                     0\n",
       "Distance4                     0\n",
       "Distance5                     0\n",
       "Distance6                     0\n",
       "Distance7                     0\n",
       "Distance8                     0\n",
       "Distance9                     0\n",
       "Distance10                    0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 53
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:56:40.708718Z",
     "start_time": "2024-09-19T03:56:40.632435Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "a7cd8d13f60b4127",
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "could not convert string to float: '20:1'",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mValueError\u001B[0m                                Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[63], line 2\u001B[0m\n\u001B[0;32m      1\u001B[0m \u001B[38;5;66;03m# 相关性分析\u001B[39;00m\n\u001B[1;32m----> 2\u001B[0m corr \u001B[38;5;241m=\u001B[39m new_data\u001B[38;5;241m.\u001B[39mcorr(method \u001B[38;5;241m=\u001B[39m \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mpearson\u001B[39m\u001B[38;5;124m'\u001B[39m)  \u001B[38;5;66;03m# 计算相关系数矩阵\u001B[39;00m\n\u001B[0;32m      3\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m相关系数矩阵为：\u001B[39m\u001B[38;5;130;01m\\n\u001B[39;00m\u001B[38;5;124m'\u001B[39m,np\u001B[38;5;241m.\u001B[39mround(corr, \u001B[38;5;241m2\u001B[39m))  \u001B[38;5;66;03m# 保留两位小数\u001B[39;00m\n\u001B[0;32m      4\u001B[0m \u001B[38;5;66;03m# 绘制相关性热力图\u001B[39;00m\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\pandas\\core\\frame.py:10704\u001B[0m, in \u001B[0;36mDataFrame.corr\u001B[1;34m(self, method, min_periods, numeric_only)\u001B[0m\n\u001B[0;32m  10702\u001B[0m cols \u001B[38;5;241m=\u001B[39m data\u001B[38;5;241m.\u001B[39mcolumns\n\u001B[0;32m  10703\u001B[0m idx \u001B[38;5;241m=\u001B[39m cols\u001B[38;5;241m.\u001B[39mcopy()\n\u001B[1;32m> 10704\u001B[0m mat \u001B[38;5;241m=\u001B[39m data\u001B[38;5;241m.\u001B[39mto_numpy(dtype\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mfloat\u001B[39m, na_value\u001B[38;5;241m=\u001B[39mnp\u001B[38;5;241m.\u001B[39mnan, copy\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mFalse\u001B[39;00m)\n\u001B[0;32m  10706\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m method \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpearson\u001B[39m\u001B[38;5;124m\"\u001B[39m:\n\u001B[0;32m  10707\u001B[0m     correl \u001B[38;5;241m=\u001B[39m libalgos\u001B[38;5;241m.\u001B[39mnancorr(mat, minp\u001B[38;5;241m=\u001B[39mmin_periods)\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\pandas\\core\\frame.py:1889\u001B[0m, in \u001B[0;36mDataFrame.to_numpy\u001B[1;34m(self, dtype, copy, na_value)\u001B[0m\n\u001B[0;32m   1887\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m dtype \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[0;32m   1888\u001B[0m     dtype \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39mdtype(dtype)\n\u001B[1;32m-> 1889\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_mgr\u001B[38;5;241m.\u001B[39mas_array(dtype\u001B[38;5;241m=\u001B[39mdtype, copy\u001B[38;5;241m=\u001B[39mcopy, na_value\u001B[38;5;241m=\u001B[39mna_value)\n\u001B[0;32m   1890\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m result\u001B[38;5;241m.\u001B[39mdtype \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m dtype:\n\u001B[0;32m   1891\u001B[0m     result \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39marray(result, dtype\u001B[38;5;241m=\u001B[39mdtype, copy\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mFalse\u001B[39;00m)\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\pandas\\core\\internals\\managers.py:1656\u001B[0m, in \u001B[0;36mBlockManager.as_array\u001B[1;34m(self, dtype, copy, na_value)\u001B[0m\n\u001B[0;32m   1654\u001B[0m         arr\u001B[38;5;241m.\u001B[39mflags\u001B[38;5;241m.\u001B[39mwriteable \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mFalse\u001B[39;00m\n\u001B[0;32m   1655\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m-> 1656\u001B[0m     arr \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_interleave(dtype\u001B[38;5;241m=\u001B[39mdtype, na_value\u001B[38;5;241m=\u001B[39mna_value)\n\u001B[0;32m   1657\u001B[0m     \u001B[38;5;66;03m# The underlying data was copied within _interleave, so no need\u001B[39;00m\n\u001B[0;32m   1658\u001B[0m     \u001B[38;5;66;03m# to further copy if copy=True or setting na_value\u001B[39;00m\n\u001B[0;32m   1660\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m na_value \u001B[38;5;129;01mis\u001B[39;00m lib\u001B[38;5;241m.\u001B[39mno_default:\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\pandas\\core\\internals\\managers.py:1715\u001B[0m, in \u001B[0;36mBlockManager._interleave\u001B[1;34m(self, dtype, na_value)\u001B[0m\n\u001B[0;32m   1713\u001B[0m     \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m   1714\u001B[0m         arr \u001B[38;5;241m=\u001B[39m blk\u001B[38;5;241m.\u001B[39mget_values(dtype)\n\u001B[1;32m-> 1715\u001B[0m     result[rl\u001B[38;5;241m.\u001B[39mindexer] \u001B[38;5;241m=\u001B[39m arr\n\u001B[0;32m   1716\u001B[0m     itemmask[rl\u001B[38;5;241m.\u001B[39mindexer] \u001B[38;5;241m=\u001B[39m \u001B[38;5;241m1\u001B[39m\n\u001B[0;32m   1718\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m itemmask\u001B[38;5;241m.\u001B[39mall():\n",
      "\u001B[1;31mValueError\u001B[0m: could not convert string to float: '20:1'"
     ]
    }
   ],
   "execution_count": 63
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:42:06.660001Z",
     "start_time": "2024-09-19T03:42:06.605368Z"
    }
   },
   "cell_type": "code",
   "source": "new_data",
   "id": "e0b0005ad2213c4e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       1113008         1361    11166.0          20:1         0   \n",
       "1       1449506         1361    11166.0          20:1         1   \n",
       "2       1449506         1361    11166.0          20:1         1   \n",
       "3       4781321         1361    11166.0          20:1         0   \n",
       "4       4781321         1361    11166.0          20:1         0   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "128785  5389427         1184     1857.0        150:20         0   \n",
       "128786     6896         2511      869.0          50:5         0   \n",
       "128787  6598279         2846    11348.0        100:30         2   \n",
       "128788   287650         2123     1453.0          20:1        -1   \n",
       "128789   490662         5176     3923.0          20:5         7   \n",
       "\n",
       "        Date_received        Date  label  Dis_rate  Discount_type  ...  \\\n",
       "0          20160515.0  20160521.0      1  0.950000              1  ...   \n",
       "1          20160516.0  20160522.0      1  0.950000              1  ...   \n",
       "2          20160522.0  20160602.0      1  0.950000              1  ...   \n",
       "3          20160516.0  20160521.0      1  0.950000              1  ...   \n",
       "4          20160521.0  20160524.0      1  0.950000              1  ...   \n",
       "...               ...         ...    ...       ...            ...  ...   \n",
       "128785     20160521.0        null      0  0.866667              1  ...   \n",
       "128786     20160504.0        null      0  0.900000              1  ...   \n",
       "128787     20160522.0        null      0  0.700000              1  ...   \n",
       "128788     20160509.0        null      0  0.950000              1  ...   \n",
       "128789     20160418.0        null      0  0.750000              1  ...   \n",
       "\n",
       "        Distance1  Distance2  Distance3  Distance4  Distance5  Distance6  \\\n",
       "0           False      False      False      False      False      False   \n",
       "1            True      False      False      False      False      False   \n",
       "2            True      False      False      False      False      False   \n",
       "3           False      False      False      False      False      False   \n",
       "4           False      False      False      False      False      False   \n",
       "...           ...        ...        ...        ...        ...        ...   \n",
       "128785      False      False      False      False      False      False   \n",
       "128786      False      False      False      False      False      False   \n",
       "128787      False       True      False      False      False      False   \n",
       "128788      False      False      False      False      False      False   \n",
       "128789      False      False      False      False      False      False   \n",
       "\n",
       "        Distance7  Distance8  Distance9  Distance10  \n",
       "0           False      False      False       False  \n",
       "1           False      False      False       False  \n",
       "2           False      False      False       False  \n",
       "3           False      False      False       False  \n",
       "4           False      False      False       False  \n",
       "...           ...        ...        ...         ...  \n",
       "128785      False      False      False       False  \n",
       "128786      False      False      False       False  \n",
       "128787      False      False      False       False  \n",
       "128788      False      False      False       False  \n",
       "128789       True      False      False       False  \n",
       "\n",
       "[128790 rows x 45 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>...</th>\n",
       "      <th>Distance1</th>\n",
       "      <th>Distance2</th>\n",
       "      <th>Distance3</th>\n",
       "      <th>Distance4</th>\n",
       "      <th>Distance5</th>\n",
       "      <th>Distance6</th>\n",
       "      <th>Distance7</th>\n",
       "      <th>Distance8</th>\n",
       "      <th>Distance9</th>\n",
       "      <th>Distance10</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128785</th>\n",
       "      <td>5389427</td>\n",
       "      <td>1184</td>\n",
       "      <td>1857.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128786</th>\n",
       "      <td>6896</td>\n",
       "      <td>2511</td>\n",
       "      <td>869.0</td>\n",
       "      <td>50:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160504.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128787</th>\n",
       "      <td>6598279</td>\n",
       "      <td>2846</td>\n",
       "      <td>11348.0</td>\n",
       "      <td>100:30</td>\n",
       "      <td>2</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128788</th>\n",
       "      <td>287650</td>\n",
       "      <td>2123</td>\n",
       "      <td>1453.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160509.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128789</th>\n",
       "      <td>490662</td>\n",
       "      <td>5176</td>\n",
       "      <td>3923.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>7</td>\n",
       "      <td>20160418.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>128790 rows × 45 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 55
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:55:48.944348Z",
     "start_time": "2024-09-19T03:55:47.604723Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "# 逻辑分类\n",
    "# 选取要预测的特征\n",
    "features = ['Dis_rate','Discount_type','Discount_man', 'Discount_jian',\n",
    "            'Distance','Distance_type','Distance-1', 'Distance0',\n",
    "            'Distance1', 'Distance2', 'Distance3', 'Distance4', 'Distance5',\n",
    "            'Distance6', 'Distance7', 'Distance8', 'Distance9', 'Distance10',\n",
    "            'rec_coupon','Coupon_popu','Merchant_popu','merchant_min_distance_x',\n",
    "            'merchant_max_distance_x','merchant_mean_distance_x','merchant_median_distance_x',\n",
    "            'Is_weekend','Weekday','weekday1','weekday2','weekday3','weekday4',\n",
    "            'weekday5','weekday6','weekday7']\n",
    "# 提取指定特征属性的数据集，并且划分为训练集和验证集\n",
    "X = new_data[features]\n",
    "y = new_data['label']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,stratify=y)\n",
    "# 创建逻辑回归模型\n",
    "log_reg = LogisticRegression()\n",
    "\n",
    "# 训练模型\n",
    "log_reg.fit(X_train, y_train)\n",
    "\n",
    "# # 进行预测\n",
    "# y_pred = log_reg.predict(X_test)\n",
    "# \n",
    "# y_pred\n",
    "\n",
    "# 进行预测，得到预测概率\n",
    "y_pred_prob = log_reg.predict_proba(X_test)[:, 1]\n",
    "\n",
    "# 计算AUC\n",
    "auc_score = roc_auc_score(y_test, y_pred_prob)\n",
    "print(f'AUC: {auc_score:.2f}')"
   ],
   "id": "ec4204ec52b90ffa",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.83\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n"
     ]
    }
   ],
   "execution_count": 62
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:47:16.478789Z",
     "start_time": "2024-09-19T03:46:41.579087Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ------------------------------------  第五部分 挖掘建模  --------------------------------------#\n",
    "# 查看属性特征\n",
    "new_data.columns\n",
    "new_test_data.columns\n",
    "# 选取要预测的特征\n",
    "features = ['Dis_rate','Discount_type','Discount_man', 'Discount_jian',\n",
    "            'Distance','Distance_type','Distance-1', 'Distance0',\n",
    "            'Distance1', 'Distance2', 'Distance3', 'Distance4', 'Distance5',\n",
    "            'Distance6', 'Distance7', 'Distance8', 'Distance9', 'Distance10',\n",
    "            'rec_coupon','Coupon_popu','Merchant_popu','merchant_min_distance_x',\n",
    "            'merchant_max_distance_x','merchant_mean_distance_x','merchant_median_distance_x',\n",
    "            'Is_weekend','Weekday','weekday1','weekday2','weekday3','weekday4',\n",
    "            'weekday5','weekday6','weekday7']\n",
    "# 提取指定特征属性的数据集，并且划分为训练集和验证集\n",
    "X = new_data[features]\n",
    "y = new_data['label']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,stratify=y)\n",
    "# 进行网格搜索调参\n",
    "# from sklearn.model_selection import GridSearchCV\n",
    "# param_second_grid = {\n",
    "#     'learning_rate':[0.1,0.11,0.12,0.13],\n",
    "#     'max_depth': [4],\n",
    "#     'n_estimators': [160]\n",
    "# }\n",
    "# grid_second_search = GridSearchCV(estimator = GradientBoostingClassifier(),\n",
    "#                      param_grid = param_second_grid, scoring = 'neg_mean_absolute_error', cv = 3)\n",
    "# grid_second_search.fit(X_train , y_train)\n",
    "# grid_second_search.best_params_\n",
    "# '''\n",
    "# {'learning_rate': 0.13, 'max_depth': 4, 'n_estimators': 160}\n",
    "# '''\n",
    "# 集成学习提升决策树分类模型\n",
    "# n 160 d 4 a 0.8890163692846558 s 0.6836\n",
    "# n 160 d 4 l 0.12 a 0.8902440244868226 s 0.6825\n",
    "GBC_model = GradientBoostingClassifier(n_estimators=160,max_depth=4)\n",
    "GBC_model.fit(X,y)\n",
    "# 预测样本的各类标签（这里是0和1）的概率\n",
    "GBC_model.predict_proba(X_test)\n",
    "# 预测标签为1的概率\n",
    "y_predict = GBC_model.predict_proba(X_test)[:,1]\n",
    "# AUC值，验证集上的性能结果\n",
    "y_auc = roc_auc_score(y_test,y_predict)\n",
    "y_auc"
   ],
   "id": "bafba43369358f82",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8867934325210997"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 57
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:58:23.669946Z",
     "start_time": "2024-09-19T03:58:22.119723Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 相关性分析\n",
    "corr = new_data[features].corr(method = 'pearson')  # 计算相关系数矩阵\n",
    "print('相关系数矩阵为：\\n',np.round(corr, 2))  # 保留两位小数\n",
    "# 绘制相关性热力图\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.subplots(figsize=(10, 10))  # 设置画面大小\n",
    "sns.heatmap(corr, annot=True, vmax=1, square=True, cmap=\"Blues\")\n",
    "plt.title('相关性热力图')\n",
    "plt.show()\n",
    "# 距离箱型图\n",
    "# off_train_data['Distance'].isnull().sum()\n",
    "# off_test_data['Distance'].isnull().sum()\n",
    "# D1 = np.array(off_train_data['Distance'].values)\n",
    "# D2 = np.array(off_test_data['Distance'].values)\n",
    "# plt.boxplot([D1,D2],labels=('off_train_data','off_test_data'))\n",
    "# plt.title('距离箱型图')\n",
    "# plt.show()"
   ],
   "id": "e86487d21bc6bfe7",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "相关系数矩阵为：\n",
      "                             Dis_rate  Discount_type  Discount_man  \\\n",
      "Dis_rate                        1.00          -0.16          0.23   \n",
      "Discount_type                  -0.16           1.00          0.20   \n",
      "Discount_man                    0.23           0.20          1.00   \n",
      "Discount_jian                  -0.15           0.21          0.83   \n",
      "Distance                        0.02           0.03          0.21   \n",
      "Distance_type                   0.01           0.04          0.18   \n",
      "Distance-1                      0.05          -0.08         -0.02   \n",
      "Distance0                      -0.05           0.04         -0.22   \n",
      "Distance1                      -0.01           0.01          0.03   \n",
      "Distance2                      -0.00          -0.01          0.07   \n",
      "Distance3                       0.01          -0.01          0.06   \n",
      "Distance4                       0.01           0.00          0.05   \n",
      "Distance5                       0.01          -0.00          0.05   \n",
      "Distance6                       0.00           0.01          0.04   \n",
      "Distance7                       0.01          -0.00          0.05   \n",
      "Distance8                       0.01           0.01          0.04   \n",
      "Distance9                       0.01           0.00          0.03   \n",
      "Distance10                      0.01           0.02          0.14   \n",
      "rec_coupon                      0.06          -0.06         -0.10   \n",
      "Coupon_popu                     0.01           0.14          0.26   \n",
      "Merchant_popu                  -0.05           0.11          0.42   \n",
      "merchant_min_distance_x         0.03           0.03         -0.02   \n",
      "merchant_max_distance_x        -0.21           0.15          0.13   \n",
      "merchant_mean_distance_x        0.04           0.04          0.38   \n",
      "merchant_median_distance_x      0.07           0.01          0.31   \n",
      "Is_weekend                      0.03          -0.00          0.06   \n",
      "Weekday                         0.02           0.00          0.07   \n",
      "weekday1                       -0.01           0.01         -0.03   \n",
      "weekday2                       -0.00          -0.01         -0.04   \n",
      "weekday3                       -0.01          -0.01         -0.05   \n",
      "weekday4                        0.04          -0.00          0.02   \n",
      "weekday5                       -0.05           0.01          0.01   \n",
      "weekday6                        0.00          -0.01          0.05   \n",
      "weekday7                        0.03           0.01          0.03   \n",
      "\n",
      "                            Discount_jian  Distance  Distance_type  \\\n",
      "Dis_rate                            -0.15      0.02           0.01   \n",
      "Discount_type                        0.21      0.03           0.04   \n",
      "Discount_man                         0.83      0.21           0.18   \n",
      "Discount_jian                        1.00      0.21           0.19   \n",
      "Distance                             0.21      1.00           0.97   \n",
      "Distance_type                        0.19      0.97           1.00   \n",
      "Distance-1                          -0.02     -0.29          -0.44   \n",
      "Distance0                           -0.21     -0.52          -0.33   \n",
      "Distance1                            0.02     -0.10          -0.13   \n",
      "Distance2                            0.06      0.01          -0.09   \n",
      "Distance3                            0.05      0.07           0.11   \n",
      "Distance4                            0.05      0.11           0.10   \n",
      "Distance5                            0.05      0.13           0.08   \n",
      "Distance6                            0.05      0.16           0.19   \n",
      "Distance7                            0.04      0.17           0.16   \n",
      "Distance8                            0.04      0.19           0.16   \n",
      "Distance9                            0.03      0.20           0.14   \n",
      "Distance10                           0.15      0.82           0.82   \n",
      "rec_coupon                          -0.10     -0.10          -0.08   \n",
      "Coupon_popu                          0.16      0.05           0.06   \n",
      "Merchant_popu                        0.29      0.04           0.05   \n",
      "merchant_min_distance_x             -0.01      0.15           0.15   \n",
      "merchant_max_distance_x              0.18      0.21           0.23   \n",
      "merchant_mean_distance_x             0.40      0.52           0.48   \n",
      "merchant_median_distance_x           0.35      0.48           0.44   \n",
      "Is_weekend                           0.06      0.04           0.03   \n",
      "Weekday                              0.06      0.02           0.02   \n",
      "weekday1                            -0.02      0.03           0.03   \n",
      "weekday2                            -0.03     -0.03          -0.03   \n",
      "weekday3                            -0.04     -0.03          -0.03   \n",
      "weekday4                            -0.00     -0.02          -0.02   \n",
      "weekday5                             0.01     -0.00          -0.00   \n",
      "weekday6                             0.06      0.01           0.01   \n",
      "weekday7                             0.03      0.03           0.03   \n",
      "\n",
      "                            Distance-1  Distance0  Distance1  Distance2  ...  \\\n",
      "Dis_rate                          0.05      -0.05      -0.01      -0.00  ...   \n",
      "Discount_type                    -0.08       0.04       0.01      -0.01  ...   \n",
      "Discount_man                     -0.02      -0.22       0.03       0.07  ...   \n",
      "Discount_jian                    -0.02      -0.21       0.02       0.06  ...   \n",
      "Distance                         -0.29      -0.52      -0.10       0.01  ...   \n",
      "Distance_type                    -0.44      -0.33      -0.13      -0.09  ...   \n",
      "Distance-1                        1.00      -0.32      -0.13      -0.09  ...   \n",
      "Distance0                        -0.32       1.00      -0.35      -0.24  ...   \n",
      "Distance1                        -0.13      -0.35       1.00      -0.10  ...   \n",
      "Distance2                        -0.09      -0.24      -0.10       1.00  ...   \n",
      "Distance3                        -0.07      -0.19      -0.08      -0.05  ...   \n",
      "Distance4                        -0.06      -0.16      -0.06      -0.04  ...   \n",
      "Distance5                        -0.05      -0.13      -0.05      -0.04  ...   \n",
      "Distance6                        -0.04      -0.12      -0.05      -0.03  ...   \n",
      "Distance7                        -0.04      -0.10      -0.04      -0.03  ...   \n",
      "Distance8                        -0.04      -0.10      -0.04      -0.03  ...   \n",
      "Distance9                        -0.03      -0.09      -0.04      -0.02  ...   \n",
      "Distance10                       -0.12      -0.32      -0.13      -0.09  ...   \n",
      "rec_coupon                       -0.03       0.13      -0.02      -0.03  ...   \n",
      "Coupon_popu                      -0.12       0.01       0.04       0.02  ...   \n",
      "Merchant_popu                    -0.11      -0.00       0.05       0.04  ...   \n",
      "merchant_min_distance_x          -0.09      -0.06      -0.01       0.01  ...   \n",
      "merchant_max_distance_x          -0.25      -0.04       0.05       0.05  ...   \n",
      "merchant_mean_distance_x         -0.11      -0.39       0.00       0.07  ...   \n",
      "merchant_median_distance_x       -0.06      -0.34      -0.03       0.04  ...   \n",
      "Is_weekend                        0.01      -0.04      -0.01       0.01  ...   \n",
      "Weekday                           0.01      -0.03       0.00       0.01  ...   \n",
      "weekday1                         -0.01      -0.02      -0.01      -0.00  ...   \n",
      "weekday2                         -0.00       0.03      -0.00      -0.01  ...   \n",
      "weekday3                          0.00       0.03      -0.00      -0.00  ...   \n",
      "weekday4                          0.00       0.01       0.01      -0.00  ...   \n",
      "weekday5                         -0.01      -0.01       0.01       0.01  ...   \n",
      "weekday6                          0.02      -0.03      -0.00       0.01  ...   \n",
      "weekday7                         -0.00      -0.02      -0.01       0.00  ...   \n",
      "\n",
      "                            merchant_median_distance_x  Is_weekend  Weekday  \\\n",
      "Dis_rate                                          0.07        0.03     0.02   \n",
      "Discount_type                                     0.01       -0.00     0.00   \n",
      "Discount_man                                      0.31        0.06     0.07   \n",
      "Discount_jian                                     0.35        0.06     0.06   \n",
      "Distance                                          0.48        0.04     0.02   \n",
      "Distance_type                                     0.44        0.03     0.02   \n",
      "Distance-1                                       -0.06        0.01     0.01   \n",
      "Distance0                                        -0.34       -0.04    -0.03   \n",
      "Distance1                                        -0.03       -0.01     0.00   \n",
      "Distance2                                         0.04        0.01     0.01   \n",
      "Distance3                                         0.07        0.00     0.00   \n",
      "Distance4                                         0.08        0.01     0.01   \n",
      "Distance5                                         0.09        0.01     0.00   \n",
      "Distance6                                         0.09        0.01     0.00   \n",
      "Distance7                                         0.09        0.01     0.00   \n",
      "Distance8                                         0.08        0.00     0.00   \n",
      "Distance9                                         0.09        0.00     0.00   \n",
      "Distance10                                        0.37        0.03     0.02   \n",
      "rec_coupon                                       -0.10       -0.01    -0.01   \n",
      "Coupon_popu                                      -0.02        0.04     0.04   \n",
      "Merchant_popu                                    -0.09       -0.00     0.04   \n",
      "merchant_min_distance_x                           0.29       -0.00     0.00   \n",
      "merchant_max_distance_x                           0.22        0.03     0.02   \n",
      "merchant_mean_distance_x                          0.92        0.05     0.02   \n",
      "merchant_median_distance_x                        1.00        0.06     0.02   \n",
      "Is_weekend                                        0.06        1.00     0.79   \n",
      "Weekday                                           0.02        0.79     1.00   \n",
      "weekday1                                          0.06       -0.28    -0.64   \n",
      "weekday2                                         -0.03       -0.25    -0.39   \n",
      "weekday3                                         -0.05       -0.26    -0.21   \n",
      "weekday4                                         -0.04       -0.26    -0.03   \n",
      "weekday5                                         -0.02       -0.30     0.18   \n",
      "weekday6                                          0.03        0.62     0.38   \n",
      "weekday7                                          0.05        0.66     0.62   \n",
      "\n",
      "                            weekday1  weekday2  weekday3  weekday4  weekday5  \\\n",
      "Dis_rate                       -0.01     -0.00     -0.01      0.04     -0.05   \n",
      "Discount_type                   0.01     -0.01     -0.01     -0.00      0.01   \n",
      "Discount_man                   -0.03     -0.04     -0.05      0.02      0.01   \n",
      "Discount_jian                  -0.02     -0.03     -0.04     -0.00      0.01   \n",
      "Distance                        0.03     -0.03     -0.03     -0.02     -0.00   \n",
      "Distance_type                   0.03     -0.03     -0.03     -0.02     -0.00   \n",
      "Distance-1                     -0.01     -0.00      0.00      0.00     -0.01   \n",
      "Distance0                      -0.02      0.03      0.03      0.01     -0.01   \n",
      "Distance1                      -0.01     -0.00     -0.00      0.01      0.01   \n",
      "Distance2                      -0.00     -0.01     -0.00     -0.00      0.01   \n",
      "Distance3                       0.01     -0.01     -0.01     -0.00      0.00   \n",
      "Distance4                       0.00     -0.01     -0.01     -0.01      0.01   \n",
      "Distance5                       0.00     -0.00     -0.01     -0.00      0.00   \n",
      "Distance6                       0.01     -0.01     -0.01      0.00     -0.00   \n",
      "Distance7                      -0.00     -0.00      0.00     -0.00     -0.00   \n",
      "Distance8                       0.01     -0.00     -0.01     -0.00      0.00   \n",
      "Distance9                       0.01     -0.01     -0.01     -0.00      0.00   \n",
      "Distance10                      0.03     -0.02     -0.03     -0.02     -0.01   \n",
      "rec_coupon                     -0.00      0.02      0.01      0.01     -0.01   \n",
      "Coupon_popu                    -0.01     -0.02     -0.01     -0.00     -0.01   \n",
      "Merchant_popu                  -0.03     -0.03     -0.02      0.02      0.05   \n",
      "merchant_min_distance_x        -0.00     -0.00     -0.00      0.00      0.00   \n",
      "merchant_max_distance_x         0.01     -0.01     -0.02     -0.02      0.00   \n",
      "merchant_mean_distance_x        0.05     -0.04     -0.05     -0.03     -0.00   \n",
      "merchant_median_distance_x      0.06     -0.03     -0.05     -0.04     -0.02   \n",
      "Is_weekend                     -0.28     -0.25     -0.26     -0.26     -0.30   \n",
      "Weekday                        -0.64     -0.39     -0.21     -0.03      0.18   \n",
      "weekday1                        1.00     -0.16     -0.16     -0.16     -0.18   \n",
      "weekday2                       -0.16      1.00     -0.14     -0.14     -0.16   \n",
      "weekday3                       -0.16     -0.14      1.00     -0.15     -0.17   \n",
      "weekday4                       -0.16     -0.14     -0.15      1.00     -0.17   \n",
      "weekday5                       -0.18     -0.16     -0.17     -0.17      1.00   \n",
      "weekday6                       -0.17     -0.16     -0.16     -0.16     -0.18   \n",
      "weekday7                       -0.19     -0.17     -0.17     -0.17     -0.19   \n",
      "\n",
      "                            weekday6  weekday7  \n",
      "Dis_rate                        0.00      0.03  \n",
      "Discount_type                  -0.01      0.01  \n",
      "Discount_man                    0.05      0.03  \n",
      "Discount_jian                   0.06      0.03  \n",
      "Distance                        0.01      0.03  \n",
      "Distance_type                   0.01      0.03  \n",
      "Distance-1                      0.02     -0.00  \n",
      "Distance0                      -0.03     -0.02  \n",
      "Distance1                      -0.00     -0.01  \n",
      "Distance2                       0.01      0.00  \n",
      "Distance3                       0.00      0.00  \n",
      "Distance4                       0.01      0.00  \n",
      "Distance5                       0.01      0.00  \n",
      "Distance6                       0.00      0.01  \n",
      "Distance7                       0.01      0.00  \n",
      "Distance8                       0.00      0.00  \n",
      "Distance9                       0.00      0.00  \n",
      "Distance10                      0.01      0.03  \n",
      "rec_coupon                     -0.01     -0.01  \n",
      "Coupon_popu                    -0.02      0.07  \n",
      "Merchant_popu                  -0.02      0.02  \n",
      "merchant_min_distance_x         0.00     -0.01  \n",
      "merchant_max_distance_x         0.00      0.03  \n",
      "merchant_mean_distance_x        0.03      0.03  \n",
      "merchant_median_distance_x      0.03      0.05  \n",
      "Is_weekend                      0.62      0.66  \n",
      "Weekday                         0.38      0.62  \n",
      "weekday1                       -0.17     -0.19  \n",
      "weekday2                       -0.16     -0.17  \n",
      "weekday3                       -0.16     -0.17  \n",
      "weekday4                       -0.16     -0.17  \n",
      "weekday5                       -0.18     -0.19  \n",
      "weekday6                        1.00     -0.19  \n",
      "weekday7                       -0.19      1.00  \n",
      "\n",
      "[34 rows x 34 columns]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x1000 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7IAAAOPCAYAAAD2ZP2HAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hT1f/A8XfS3aaD0tJJW1bDnkWGooAgGxFRqsgSRMC9QAQVUBFEEAFZX8ZPVEDEMpWlrKLQlk1ZZZduSvdMm+T3R2hoaWmLXoTq5/U8eaC5537uueeO5OSMqzIajUaEEEIIIYQQQogqQn2/MyCEEEIIIYQQQtwNqcgKIYQQQgghhKhSpCIrhBBCCCGEEKJKkYqsEEIIIYQQQogqRSqyQgghhBBCCCGqFKnICiGEEEIIIYSoUqQiK4QQQgghhBCiSpGKrBBCCCGEEEKIKkUqskIIIYQQQgghqhSpyAohhBBCCCGEqFKkIiuEEEIIIYQQolypqal07tyZmJiYSqUPDw+nR48etGnThhUrViieH6nICiGEEEIIIYS4o5SUFEaPHk1sbGyl048ZM4ZevXrx448/snnzZg4ePKhonqQiK4QQQgghhBDijt5++2169uxZ6fSbNm3C3d2dV155hYCAAMaOHcu6desUzZNUZIUQQgghhBDiP0an05GVlVXipdPpykz7ySefMHTo0ErHPnfuHG3btkWlUgHQtGlTTp8+rUi+i1gqGk0IIYQQQgghhJldi1fvdxbK9MWLWubPn1/ivVdffZXXXnutVNqaNWveVeysrCzq1Klj/luj0ZCYmPjXMnoHUpEVQgghhBBCiP+Yl19+meHDh5d4z9raWpHYFhYWJWLZ2NiQl5enSOwiUpEVQgghhBBCiP8Ya2trxSqut3N2diYlJcX8d3Z2NlZWVopuQyqyQgghhBBCCHGvqP570xI1adKEX375xfz3mTNn8PDwUHQb/71SFUIIIYQQQgjxt2VlZVFQUFDq/c6dO3P48GEOHjxIYWEhy5cv55FHHlF021KRFUIIIYQQQghx1/r27cvevXtLve/q6sr48eMZOXIkjzzyCOfPn2fMmDGKbltlNBqNikYUQgghhBBCCAGAXas37ncWypR7+Ot7vo2rV69y8eJFHnroITQajaKxZYysEEIIIYQQQgjF+fv74+/vf09iS9diIYQQQgghhBBVirTICiGEEEIIIcS98h+ctfifIKUqhBBCCCGEEKJKkYqsEEIIIYQQQogqRboWCyGEEEIIIcS9olLd7xz8K0mLrBBCCCGEEEKIKkUqskIIIYQQQgghqhTpWiyEEEIIIYQQ94rMWnxPSKkKIYQQQgghhKhSpCIrhBBCCCGEEKJKka7FQgghhBBCCHGvyKzF94S0yAohhBBCCCGEqFKkIiuEEEIIIYQQokqRrsVCCCGEEEIIca/IrMX3hJSqEEIIIYQQQogqRSqyQgghhBBCCCGqFOlaLIQQQgghhBD3isxafE9Ii6wQQgghhBBCiCpFKrJCCCGEEEIIIaoU6VoshBBCCCGEEPeKzFp8T0ipCiGEEEIIIYSoUqQiK4QQQgghhBCiSpGuxUIIIYQQQghxr8isxfeEtMgKIYQQQgghhKhSpCIrhBBCCCGEEKJKka7FQgghhBBCCHGvyKzF94SUqhBCCCGEEEKIKkUqskIIIYQQQgghqhTpWiyEEEIIIYQQ94rMWnxPSIusEEIIIYQQQogqRSqyQgghhBBCCCGqFOlaLIQQQgghhBD3isxafE9IqQohhBBCCCGEqFKkIiuEEEIIIYQQokqRrsVCCCGEEEIIca9I1+J7QkpVCCGEEEIIIUSVIhVZIYQQQgghhBBVinQtFkIIIYQQQoh7Ra263zn4V5IWWSGEEEIIIYQQVYpUZIUQQgghhBBCVCnStVgIIYQQQggh7hWZtfiekFIVQgghhBBCCFGlSEVWCCGEEEIIIUSVIl2LhRBCCCGEEOJeUcmsxfeCtMgKIYQQQgghhKhSpCIrhBBC/EWnTp1ixowZfytGbm4uiYmJpd4/duxYhevm5+eTn5//t7b/008/8emnn5Z6///+7/+4dOnSXcfbuXMnL774IgkJCX8rX0IIIUR5pGuxEEII8RdFR0fz3XffMX78eMBUKW3evPkd03/88cc8//zzJd778MMPuXTpEmvWrMHa2hqAGzdu8PzzzzNixAjeeeedO8YbP348BoOBuXPnllp24sQJxowZw+bNm3F1db1jjIyMDOLj40u9v379egoKCqhdu/Yd1y1LdnY2f/zxB5aWFX/FiIiI4IUXXrir+ACbN28mMDDwrtcTQoj7QmYtviekIiuEEEL8RZaWliUqbFZWVgDMmzePFi1alEg7YMAA8/LiXn31Vfr06cP8+fN5++23AVNFzcbGhsGDB5e7fSsrKwwGg/nv6OhoXnnlFZYvX45arSY5ObnMbQLk5eVhZWWFhYUFFhYWFBYWYjAY0Ol05OTkYDAYMBgMnD9/npycHGrXro2jo2OFZVK0PVtb2wrTWlhYAHDw4EHs7e0ByMzMZM2aNQQHB5faXmJiIl27djVX+IUQQvx3SUVWCCGEuEurVq1CrVZz7tw59Ho9a9eupaCggLZt2wLg7OyMu7t7iXUsLCxKVHrz8vKwtrYmICCAN954g5o1awJgNBpZvXo1Q4cOpUaNGubKpY2NDaqbE4bodDosLS2xsrIiJyeH77//nkGDBnHq1ClSU1Nxd3cnOTkZALVabV5HpVKZK5r9+vXj8uXLqFQqjEYjjRo1YtCgQWRmZnL48GGuX7/ODz/8wK+//srZs2f59ddfS1Us8/LyUKvVWFpamrdTpDItskVprK2tsbGxAWDBggUsX76cjh07ltietbW1uQJbVAEWQgjx3yUVWSGEEOIubd++HYPBwJUrV9Dr9WzZsgW9Xk/NmjXLrWQVVfYKCwtp1qxZudtYuHAhCxcuNP+9f/9+c+V45cqVHDhwAE9PT6ysrFi0aBEBAQGcOXOG69evo9Vqzeu1bNnS/P/PP/+c/v37A7Bx40YsLS357rvvOHLkCF9//TWFhYXmim7v3r1588030Wq1dOnSpVTFHGD06NEcOHCgzPzfaf969+7NrFmzgNKV3XPnzrF8+XJ0Oh1PP/20+f26deuyadMm898qmQFUCFGVyD3rnpCKrBBCCHGXvv32WwCCg4PJyspi5cqVJZYPGTKk3PUtLS3Ztm0bNjY2JVoy33jjDVq1alVifb1eT35+PtWqVTO/FxMTg6+vL4WFhVhYWNCzZ0/Wr1/P5cuXeffdd+nXrx8XLlxg2LBh/Pbbb9ja2lJQUICTk5M5RlELKJjGtf72229YWVlRWFiIVqslOTkZT09PjEYjAA4ODqX2Y8aMGRQWFpZokV29ejVLlixh165dpSqc/fr1w8XFxfx38eWpqam88cYb6HQ6VqxYQfv27YmMjGTw4MFMmzZNWmGFEEKUIBVZIYQQ4i/Iy8sjMjISKysrTpw4QZMmTcwVsyVLlhAUFFQife/evUv8XatWrVIxra2t0Wg0eHp6lrvty5cv06lTJ86fPw/A4MGDOXXqFG+99RZz584t0bXY1dW1VCU0NzeXFStWcPHiRQ4dOkRycjK5ubkMHz6cP/74g3feeYfCwkICAwNJTU0FTBXq2yuTHh4epfKWlZWFt7c3NWrUKLPMilemi5s9ezYuLi589dVXvPbaa7z22mssX76cSZMmVdh6LYQQ4r9HptASQggh/oJdu3ZRUFCATqfj1VdfZcGCBeZltra2ODg4lHgp1R3WaDRy6tSpErP21qxZk7i4OFq1aoWvr2+FMezs7Dh+/Dju7u60b9+exx9/nFWrVtG1a1cmT55M9+7dKSwsZOLEidja2qJWq0lNTUWn01UY+/z582VW0gFycnJwdnYuc9mkSZNYsmQJbdu2pWHDhnz++ee4ubnRqlWrCrcphBAPNJX6wXxVcdIiK4QQQvwFa9euxcvLi/j4eD755BPGjBnDQw89VKl1i54be/sESQUFBaSmpnLx4sVS7xcUFNCkSROMRiOzZ8+madOm/PLLL+Y0L774Ir169eLkyZPY2dkRGxsLwJUrV7C2tiY3N5fAwEDzbMKLFy8GTM+LPXLkiDlOcnIye/bs4aOPPuKnn37irbfeonbt2hw+fJirV68SHR3N559/XuZ+6XQ6Tpw4wYgRI0oty87OxmAwlNkim5+fz44dOzhw4AA7d+6kQ4cOrFq1ih9//JGePXvSrFkzWrRoQd++fSssWyGEEP8NUpEVQggh7tKJEyc4ePAgb775Jl999RWPPfYYTz/9tLk7b0VjZF977TUuXrxYarKjjIwMTp48WWJiIzBVEK2trQkLC0OtVvPoo4+WGffSpUu89NJL2Nvbm8e2vvjiixgMBnJzc9m0aZP5ubB5eXkcOXKE48ePY2dnB5gqlG+++SZNmjRh0KBB9O7dm4sXL7J//37mzp2L0WgkODj4jvv122+/kZWVRdeuXUsty8zMBCizImttbc3evXtxc3Nj9erVfPfdd3zxxRcEBwczYsQIduzYwZUrV0qMrxVCCPHfJhVZIYQQ4i4UFhby2Wef8dhjj1G3bl3z+5988gkA77zzDnPmzCn1HNmBAwea/7927dpScc+dO8eTTz6JSqVi6dKlNGnS5K7z1q5dOyIjIwE4c+YM/fr1Y9euXWVO1GRjY8Mnn3yCtbU1H3zwAQATJkwgISHBnD9nZ2datmxJw4YNSU1NJSEhocR+FKfT6fj6669p06YN9erVK7W8aKxtWZVRlUrFnDlzADAYDLz55pusWbOGGTNmMHToUF577TUAEhIS7q5AhBDiQSCzFt8TUpEVQggh7oJer8fBwYFJkyZx7ty5MtO4urqWmrCpvFl3DQYDM2fOpFWrVvj5+fHGG2+wcuXKSo13/atUKhWTJ0+mVatW5pbhjz76iIyMDFxdXbl48SJ16tQB4OTJk1hbW5d4HFBxRqORjz76iNjYWGbPnl1mmuvXrwPg5uZWbr6GDx+OXq+na9eurFmzpsxJo4QQQoiqP8pXCCGE+AfZ2NiwdOlSatasWeZyg8Fwx3X1en2Z6SdNmsSxY8f4+OOP+fDDD3FycmLAgAHs27dPsXzf7vr167z00kts3LgRgNdff50NGzbg5+dHcnIyffr0ISIiAjDNTvzDDz/w559/loqj0+n44IMPWL9+PePHj6dRo0Zlbu/YsWNYWFjg5eVlfq+s8pg4cSLt27dn9erV9OjRg//7v/8rlaao27QQQoj/LmmRFUIIIe5S0SRNRRWxomepGo1GjEbjHcfI3l5xi4yMZPLkycTExLB8+XLzTMQrV67k5Zdf5qWXXqJNmzYMHTqU9u3bm8eyFinaHkB6ejq5ublYW1sDpvG2AGlpaeTn56PX6ykoKMDb2xuAhQsX4ufnR79+/QBo2rQpq1evZtiwYbi5udGhQweWLVtG69at8fPz4/nnn+ezzz5j06ZN5tbl48eP89FHHxEVFcX48eMZPHhwifz99ttvbNu2jaSkJMLDw2nXrl2J59cWlUdSUpJ535ycnOjfvz/9+/cnPDwcb29vc5fiolbdwsLCCo6QEEI8QP4FMwQ/iKQiK4QQQvxF+fn5gKlV0tLS0vx4mjuNkS0oKADg559/ZsOGDURERPDEE0+wePFiqlevbk7r5OTEypUrWbp0KQsXLiQsLAwPDw9+/fVXNBqNOZ1OpzO3AK9cuZL58+djZWVlftSPtbU13bt3B0yVP1tbW44ePcq1a9f48ccfmTNnjrlS2rdvX+bMmWPuUvzss88ya9YscnNzsbOzY9SoUWzdupXz589Tv359rl+/zrvvvktOTg6LFi3iscceK1U+tWvX5tdff6VmzZo8++yzvPLKKyWWF1Vki/JYWWW15AohhPhvURmlf44QQgjxl+Tk5JCSkoKPjw8qlQqj0UhsbCzu7u4lWh5vt3r1avbu3cvo0aNp3rx5udu4fv06P/74I7Vq1aJXr14llr355pvo9XrmzZuHXq9HrVaX+7zaopZjgLNnz6LVakukz8rKMleUjUZjqVjF1wfTY4SsrKxwdXWt1DZvFxERwQsvvMCRI0fKnJDqdgkJCTz22GNs3LiR+vXrV5heCCEeBHbdy5474H7L3fb2/c7C3yIVWSGEEELcF/n5+Vy/ft38Q4AQQvwb2fX46n5noUy5W9+631n4W6RrsRBCCCHuCxsbm3s6M7MQQoh/Lxl5LIQQQgghhBCiSpEWWSGEEEIIIYS4V2TW4ntCSlUIIYQQQgghRJUiFVkhhBBCCCGEEFWKdC0WogJ2LV5VJM7GVR8rEgdgzfEEReIMaOKhSJzLaTmKxFFy0tJsnUGROF6O1orEydcrkx+9QbmJ5gsVjPUgUSt4Hv1LiwilnleQrVPuea5OthaKxHG0VuarTUpegSJxmru7KBIHICIhVZE4ukJlTgB7a2XaQywUvPlbWyoTS6lrRKldy8xX7lqr4aDM51qWrlCROHkKnY9vdqilSJx7QmZlvyekRVYIIYQQQgghRJUiFVkhhBBCCCGEEFWKVGRFuUJCQtBqtTRo0ICOHTvyxRdfoNPpzMtjYmLQarX3MYf3n6uzA2e2TMbPy/V+Z+WuuNha4mJniYWS/TCF+BfJSr1B3PlT6HKV6Tp/v7bxT8lOu0HixdPo8qr+vpQnK/UG8RdO/yuOGUDOzeNW8C8/bv9V2Wk3SLjw77wuy9u3xMREjhw5QlZW1n3IWRlU6gfzVcXJGFlRocDAQFasWMGxY8eYMmUK6enpfPbZZwB4e3sTERFxn3No0rlzZz7//HPatGnzj22zuosDP389mgAft3LTWRmymPnuSK7Hx9C+ax+eHDoWVSXHS1yPj2H9ouks+/Z77K0tiE3LK7H83E+zsbJ3pnavESXef6xONZ5s7IHGxpKzSVksOxhDep5pPEs3rRv1rdP5+N2RxF67xsNd+9D1+ZfLzVP81Uusnv85yQkxNG3bkRMH9zDtu60l0mz6+iOuHA8z/+3uV5fCgnyy01KwtrWnID+XRo925+FnRqJSqUhLjOXHT1/n5Xk/m9cxGo0c3voTx3ZuICc9FbWlBW2eHEzrXgPNaWLOnmDXyrmmuHb2FOSZ4j7y7EjzPuz63+fYapxp/9xYc9wTO9ZxatdGctNTUVtY0KL3IJr3uBV385fvkXg+0vy3l7YZIz+eDcCR37ew9+dvyclMJ6Bhc/qOHo9jteoAXD1znF+WzSEnI41Hnnyetr2eIenaZTYtnklqQiwtOvWk3dPDWPnRWLoMeRW/Bs1Kltv8z7B3cqbLkFeJPnOcHf/3NbkZ6bTt+xwBjVux9X9fkpoYR9OOPWj8WA9WT32DVxb8XCLG+q8+5NKxW2Vfw78uhbp8stJSsLGzR5eXS5PHuvPowJeIOXeS3/7va3Iy02ndO5iW3Z42r3dyz6/8sW45+dmZqC0saN07mLb9hpAcc4Wdy2aRnhRH3aBHOH8olDHfhJQ6T9ISY1nzyeuMnv9zhcepeNriKspDavw11Jamj6+H+jxXIv+Ht/7EkW3rKNTp8GvUgoaPdGX/2mXkZKbzUO9gWnV/mqSrF1jz6VuoAEtrG4xAmz7P0ap78TjrCNu8Go2rO5k3Emnbbwgn9/xC7s0yq928LaumvEI1j5p3zM/BDd8RtvH7UmXk6FqDAl0eXnUbEBd1qtQ2bi8vS2sbwjf9UCrO0+O/wLd+MzbN+YjLxa47Fw9vhk5fUaljFrnnVw5u/I68rHR86jejyWO9OLD+/8jNTCeoV8lzo+j4rp5q2u/0pDgCH+5G6/4vEvnbeo5tXYNDNTeybiTRdezHeAU2Ma8XH3WSP1bNJyc9BWtbOwry89DeXLfomv1lwTTsHZ3pNPiVEtuMOXuC37+dW+IYFjkVuoPfV85FX1CAb/2mDBj/hXnZ6pkTOX/0oPnvWo1aMnjiTACunDnOr8vmkJl6w3x9tOjUky7Pj2LNl5NKrOfboDn93psOwNFtPxO+8XsM+kL0hQU07tSbjoNvzaMQuedXwjd+R15WBj71m9Gq57NsmfYtSfEx2Ds6kpwQZ07boFkQ73w6v9Rxjb16kblT3+HG9URUQP2mQYx4+2NcXG99zqQnxbH+szcY9vVPAMSdO0Ho9/PJy0qnRY+BNH2iPymxV9izYjbp1+Op/0g3WvcbyvrPXufh58bgVsd0bCJ/C+H4r2twcDUdtxZ9BnMu9FfyMtNp2v1ZGnfpT2rsFfZ/9xUZSfEEPtyNrJQk7JxcaDtwTKm8b1/0OXaOztQJeoS9380jNzOdVj0H0rzb09yIucKuFbNIiYsGQF9YgG/95jw+4h2cqpn27fDWnziy/db126B9V/5Yt+yO5+Pl42FsmTcZa1t782cLqAj/ZS2Htpri+DduyRPD38TO0cm83rWzJ9i6ZCaZKdexsLCkeZe+PBb8kvlcTE2M5YfJr5e6z57Y/QuhPy0n7+a9qU2f5whs3YFtS2eRlhhHQJNWJF29SG5WBm36BBPUfYB53eO7f+HPkO/IzUqnZoNmNOvUi/3r/o+MG0kU6vJLlaWVrT0WFha07fscQT1uxTm2fR0ntv9MYUE+vg1bEtiuC2E/Lzcfe//mbc3nxvEdP3No8w8Y9Xr0BTrqBD3K46PeB+DPzT9y8Je1FBToqN24Fb1GvoW9o7P5s+tGXDRqC9N9rUO/QbTt9UypPOoLC/lh8is07tCNk3t+JSczHa869UlNiCEvOwvtQ49Ru0Vb9q5aRFax+1rjR7vTYeCtz4FVU17nxbnrzHEjNn7Hoc2l73l9352BT/1mN8vhZw7/shpNNTeyUpLo8epkuDlGdvny5SxcuBBPT0/i4uJYuHAhDz30UKl4ouqr+lVxcc+p1Wrc3Nzo0qUL06ZNY8OGDaSlpZmXOTk5lR/gX2zl9OH8tO1w+YmMBtzzj1Kzjpb3vlxG/LUrhO36tVLxkxPjWDb9A+bMnkVGXiEHL6fiYGPBI7WqAZB64RjplyPx6xxcYr16bvb0a+LB0oPXGL/5LFZqNc829wLAw9GazrWdGDriJVx86vLlkpWkJUYTXk6eCgt0LP38fXzraBk+/jOO7v+N3OzSv3Jev3KeQVMX8/L8nxny+fKbX6A7YG1rR2FBPo8+P5aUuGjO7N9B+vUENs35iPzb4pzat41jO9ajy82maec+ONfw4fDWn7h25hgAORlpbJ77MfWK4uryeWyQKe7p/TsAuHryEHHnjtPqySHmuOf+2E7kb6a4DTr2xqmGNyd3/EzcueMA6At0JF04Ta1WHeg3cR4+DVpQq1UHAKLPnmTPTyt4csz7vDbnBwoLdPz2w2IAsjPS+PHLD2ncvhPDp8zj5B+/c/F4BD9+OQmvWvUY8dlCrsdeZfOCz0iOuVKqzC6fiCD69DEeeXoYORlphHz1EQ3admLQx19z6o/fWDtjPB616jFk6jckXI7ix8/eIS87s1ScxCvnGfrZYl5ZEMKLM1aQlhhHYOtHTZUGXT6dB7/Cjbhoju7cwIY5H1G/bSeenTiHcwd2mcs2NiqSP39egb5AR4tuT+NWszbHftvIlZOH2Pz1R9QIqEuv1z7iXNgedDnZpfKQfj2BjTePaUXHqXja4irKg6u3H2DETuNEq+4DSub/3EnO/LGTZyZ8yaAp89Hl5rBl/qdo23YkeNIczh7YxZWTh1g3Yzz6Ah1GwFbjRFCPAZwtFic1IYZDW9cxZNoSXvhkEU069Sb0xyVo23Tk2YlzOB26nZ+mv0dBbm65+QnqNZDR3/xsfvW/WcnStutM95ff58qJQzw+7I0S2yirvDTV3ErEeX7qQuwcnXH3q2s69pfPYWVjS1CvgQR/PA8rG7tKHbO4qEgObPiWJ0a+x9AZ36LLzWHb4mkE3tzPcwdv7Yv5+H71IQW5udQIqMvAj+aRGh/Nie1rObnzZ57+eBH9P1xAk679ObL5O/N6uZnp7FwwhVotH8HKxpbCAh1tB44mNT6a8wd2AhBz6jDXzhyjXf+hJfKYk5HGxq8/LnEMi/KUeeM6O5bPxs0ngP7vTSfp6gX2r11qXjf+8nlGz1jKuP9tZNz/NjLwnanArWu2QZtHsbYzlXX3Ya9yPfYqx/duN6/30vx1vDR/Hb1en2w+L478uhZU0Kp3MM26PMm5P38j5sxxc3mGbVhJ15HvMWTG/1GYn8eWuZPxr1ufSV+tIO3GdfoNGsXc1TuZu3onr06aWeoaKijQMfvD18lIS+HFNyehbdKKG9cT+Gn5XHOajOsJbJ37Efk5WTfLN43t30yh7kOP0e/92ZwP20105GG2zZuMm389+k/8mrT4aH7/33RSYq/cOp6JMUTu/JmnPl5Ev0kL0D7ak4if/0ftoMfoNW4Wl8L3EHvqML8tnEJ1v7r0mfA1CedPEnPqEC36DC6V9+jIQ8SePUbTLk/y67zJ1HuoI09/8BVRYbu5GnmYX+Z9jL1LdSysrXH1CaDdgBEUFuj44+Yxiz13kjN/7mTA+C957mPT9fvrgk/veD6mxF/jl3lTMBoMDPxonvmz5drZE5zav5PgibMY/Mk3FBbo2LN6cYlzKmT2h+TnZKNt/SjONbyIjYokMtT0+ZF2PZ6QWR+Wus/GREWyf90KCgt0tOr+NO41a3N4x3p++uJ9PALq8fS704iKCMXV24/nP/yaM3/uIvpmfmPORfLHz9/S8+VxvDRrpenetGAa9dt1YtDHc3GvWZs+r36IY/Ua1GnRFgAHJ2da93yGMwd2EX362M1z7CRRf/5G33EzefrD+ehys9m56FPzsT/7xw42fzme/Jws0hJiOLZtHTZ2GgLbdaFxl37EnDnCuT93cvXMCU6E7mDIR3N46bNFFBbo2PmD6d8fv5yEu48/GMHe0Yl2vZ/l5B+/c+XU0VLH/NCva7kRc4U/fv4WbduOtHziKa5GHqblE/0ZOHE2cRdOsXHOR9Rrfeu+1umFkp8DG766dS4XadFzIM99tgwrW3ta9BhIj1cno1KrKcjLNR2jhBiObV9H8NTFDJyyiGZPPE34RtM95/LlyyxbtoxffvmFzZs38+KLLzJ37txSeRf/DlKRFXelXbt2qFQqzpw5A9y5a/H+/fvp0aMHzZo1Izg4mOjo6ErFHzx4MCEhIaxYsYJOnTrx+++/m5ft2LGDbt260bx5cwYPHkxiYiIAI0aMQKvVEhsby5AhQ9BqtSxZssS83r59++jTpw9BQUFMnDixRNfov+uVT1bzzeo95aax0yejMhbS/8XXcPfyoc8Lozjw25ZKxV/8yTiGjhqLRqPhXGIWuQUGzidl06F2NfQF+Vza8j/8uwzC0s6hxHqeTjZ8dyiO04nZpOYW8sflVGq52gGm2SE//b+NFOTl0G/4qzhU9+LV198k7Pdf7piPM0cOkpeTRb/hr/Lzktm07dqnVJrMlOsYgeq+AdjYa7h8PAwHF1fc/epSoMuj4wuvEh15iHb9h3EqdDub5nxIo0e7l97Wn7/hUbs+mmpuPDZoDI88MwK9Lp9T+7YDcO7gLhycXXH3N8Xt9MKrXD15iPZPm+IW6vLZ/d18Wj81HBt7jTnuhQO/U6N2fRxc3Gg3cDQP9X+RwoJ8zu03xb0Qtguj0chjw97Gza8uDz09kothuwC4EX+NHi++Se0mrXCq7k6zR7sTd/kcAJF//I7GxZUOTw2mupcvj/YfzP6Nq8jLyeaJF8bg6uFNy8d7c+HIAZzdPEvsa4Eun53fzuPRgSOwddBw+s9daFyq077fC7h6+lKrSWtyszPp/Pxoqnl4k5GciKV16dkmM1OugxHcfGth66Dh0vEwHKq5mltlHx/yKldORPDIgOEc3rEeBxdX2j45iGqePjzUd5C5bFMTYqjdvC2Oru50GPgSTTv3wdLKhogta8jPzebR4JfZ8918Gj/Wo8zzZNOcD2l885hWdJyKpy2uojxU9/FDU82NHmMmcvlEeIn8J1w6S0DTh3D1qomLhw/2ztVQqdW06Wva17ZPDuLPn78lPycLa3sH7B2d6TV2IpePh9P2yUFE3oxj0OvpMvxNNC6mFve8zHRUagseuhknPycbS0srgHLzY2lljY29xvz6c91y7DTOtH96GJpqbgT1fJaLRw6U2EZZ5XXmz99KxDnx+yZaPNEfG3sHMlOuU6DToanmRvunh+MREEibJ1+o1DFLTYih0+DX8GvUEkdX95vnp4qH+gzCxcN0bpwO3V7i+HrVbQBAh4Ev41LDm6B+Q7l8eD+PvPA69s6m4RWuvrVLfDG9GL4be2dXqtesQ6Eun/YDxxJ76jBB/YYS9ccOCnX5/Ln6Gx55xnQdFHf2gOk8Kn4Mi47TgQ0rUQED3p+Jf6MWtOs3mFP7TRXjjBvXASM1apquCVsHDda2pnvgyZvXrGdAPQry8+kx/HUuHo+g88ARHPptk3m9ovK2srEFwKjXU6tFWxxcqtO6z/P4NmiOrcaJ06HbANOX646DX6Vmo5ZoXN1x86uLXpfPsyPewNLKGltbeyKPHMRe44i9xhGbm/kpLvLQAXJzshn6+kTad+7FwJFvgNHIlQtnzWm2zvuI+h1uXTvnw0zl27L38zh7+NCqz/Mc/XUNutxs2j37Es41vGnwaE+uHj+IY/VbM9UbDQbaD7p13PKzMlCp1TTr+RzONXxo1us5jm//EV1uNg8NeAl7Z1dy0m9g51StxL0VoFCXz97vv6Ht0y9y9UQ49s6uBPV5HhcPH4L6DOLIL6vR5WTj17gVnYa8Qaehb3D5yB80eOQJrl+JAiDx8lkCmjxEtaLr18l0/d7pfFz/5fvmFkOXGt7mz5aES+eo3cx0H6jm4UODth1JTYg1r3fmz13Y2NmjUkG3kW/TYcBwbDWORO41HceQWR/S5LEy7k3x16jdoi2O1d15LHgUzR/viwo1eVmZdHzuZeIunEbj6kZuZjrVPH1o1+8Fc8zUhGt0Gfo6/o1N15qTu+laa/fkINxr1uLh/kM4unMDBXm5ZKelYOfoTJ/XTL1s2j35Aif3meJcv3wOvyatcfH0xbmGN3ZO1VCpLczHXpebja2j883jq6d+h24U5ufS7tmX8NE2w8bBiXP7txN38Sx1mz+Em3dNXD19aNS+EynxMVw4Fk5eTjbuvv44urrx9OsfceFoGI/2H8zRPSV7YN2Ij+Hwtp+xcdBgp3GkTd9BXI08TIOHuxB34TSuXjXxqKXFYDCY72udB7/KlZOHeHjAMCL3bWfDV2V/DlhaWXP1RDgOLq606T+MKyfCqPtQRy5E7AXAYNDTccgbONy8R1evWZv8mz886PV6PvnkE2rUqAFA/fr1SU9PL7WNf9z97kL8L+1aXPX3QPyjLC0tcXFxISUlpdx048ePZ8CAAWzfvp3AwEDmzJlT6W38+OOPHDx4kE8++YQWLVoAkJaWxttvv82YMWPYsWMHLi4uLFiwAIB58+YRERGBl5cXixYtIiIigmHDhgEQHR3N2LFjGTp0KCEhIZw6dYqlS5feadN37UrsjQrTWBkz0amdsb75ZcgnoC4J165UKv7Lk2bQslVrjh8/bn4MSFa+Hi8nG2L2rkNfqEOltiDt0kmMxZ4VEHoplSMxGea/PR2tScwydV2Ky8jn1OkzOPrWw87OjgBXe5w8A0gso7WwSOyVi/gHNsLaxpaRH3zBo70GlEqTePkcRoOeZe8MYsHovhz7bQNedRtxI+YynrUb4BPYmKSrF3CrWZuU+Kv0fWMq9Vp3KBUnLysDXW42vg2ao1KpUKvVqC0tuR59AYDr1y7h26A5ydduxtU25nr0zbhxVwnb9AOFBfmo1RbEnT1mLpe87HR0udl412+GSqVCpbZAbWnJjWumuDGnj6K2sGDthyP5v9f6cWzrGlLjrgLQolNPGjx0K6834q/h6uFj2u+rFwlo1MLcJc27Tn2SY6/iW7eB+Qtw2K/rsLC0xMmtRol9PbDhewp0+agtLLh66ihJ0Rfxa9jcHMugL8TCwtIc59nxM0q1YAIkXDqHwaBn8ZvP8/VLfTiyYz0+dRtx/dolvOrUx1fbhMSrF3CvWZvs1GT8GtzahmdtrblsGz/aHSNGc9mnJsRQzasmqfHReNY27U/fN6bSvMuTZZ4nxY9pRcfpTse/ojykxF/Dt0Fz3P1McYrnv7pvABcO7yctKY6cjDSiTx+luo+/eV89amu5fu0i1Tx9sbS0xt2/Lu5+tbkRdxWP2lqSrt6M4+NvbhXR5eVy+UQEbr61zHF6jp1Efq6pdbO8/BSXlXqD61cvUrul6cfA6j7+NHu8D9ejL5TYxp3Kq3ici4f/pNnNY5B46RyGwgIyU5NZMPpJti6chounb6WOWaNHu1O31SPmv2/EXsHBxfXWuVHrVpkUHd+iimbROenqU4vMG4n4NTUN6SjIy+X07k0ENG9vXi8l5hJe2makxF6mRq36eAY25kb0BVx9apEaH82xX1ejL9ChtlATffpYiXvZ9WuXqFnsmih+nJKuXkDj6mauoNZ76FHyskxfZmMvnsVgMPDVqwP5fHgvfp77Cbk3lyVevUitRi1Iir6Eb90G+NVvSvyV83j41eZ67FXzeotGP8n2RZ+bW+ZcffwxGAz4NmhOQX4eJ37fRO1Wj3D96kUAGj7anTrFyjM5+iI2GidsbG25HHUKVCounj3J2AEdWfzFJLKzbt2ji1y7cp7Axi1o+1g3AHwD6pKanEQNL19zmh6vTaFOq2L3o2uXzfc1APcALWnx0dSoXd98nE7sXI/awhJN9Vv3IBcvvxLHLebUIap51yoVx71WfSytbTn+62oMBgO56Skl7q0AEZtXUVh0Lzt5CJ9i+fGoFUhK3DU86jSgSac+1Gn1CNV9a5ESF01aQgzONbxvlm8AF4/cun6vnSl5/d5+PtZt9QgetW/9kF702eLmG8D5Q3+QlhhHdkYqJ/dtx79xS3O6pGuXcHCpjlcd0/XhWUdLWlICN252ee7/9idoH3q01LFp8lgPMGK+f6YkxGDj4ICFpekefT36ErWatDZ3nfasrSXxZn6bPNaDwNbFrrWY2661OlpuxEXj7leH69cuU7dle2r41eFGXDSedbQkXjHFqeYTwOUjf5CeFEduRhqxZ45RzftWGXV9+QNzq2U1b38sLKyoUbs+GI1E7tpE3Yc6khoXjXvNAM5G7CclMY7s9FSO7dlKrSatSLx5TSTHRhPQqAUe/nW4HnsV7zr1SbhyvkR5/LrsK1r3ehYLCyvc/euiUqnIzcrAu25D83HKSE5EbWFB8rXLeNUx3deKvgfciLvKk2+W/TkAcOPaJXzqNycnPYXLR/6kdZ9BJEebrjVXb38Cmrc1n7uRv2+idsuHTedF3bp07twZgOzsbL7//nueeOKJMrchqj4ZIyvumkqlKvEBVhYbGxt0Oh0ajYYpU6ZgMFT+GZo5OTl8//33WFlZmd9zcHBgz549ODg4EBkZSUFBAVeuXAHA3t4eMHVztre3L9HVecuWLTRs2JABA0wVr+DgYNatW8fYsWMrnZ9Ki9+Pb05iqbeNqMixvPUruKlyZkFOVgb2mvK7Zbt5+mBlaWr5dq/R0Py+wWAg89Q+7Fw9yU9PJu7gr9g4u1E/+L0S41zPrJ5BxpVTHLeyQFdoQH/zuKlUarRtOvF4YHVyCwxcTM5BpVaTk5WJvcaxVD7yc7JxreF1M0/epCTFA5RIn5YQSw3/ejwy8CVUKjU/TXuLlLir2Ng74OTmibWdA9lpyaZKpMoCGwcNutzS3VPdatYm/vwpApq2BuD0/h3UbNCCa2dM3Zp0uTlU9/YnOz0FZ3dT3KzU5Jv7reLItp/xrFOfrJTrRO7aiMbVnS6jP6S6bx0SLp4iNyONlW8OoFCXh9EIafHXWPnmAPSFhdg5VaP765+ASsW+b2ejLywgNysTu2JlkpOZzpHft9DvlQn8OOtDLhwLQ622IPLP34sOOPm52bjUMLW+HtuzjfzcHKxs7DDobz1zLyM5iYhtP+NVuz4HN60mNSEWo9GIhZUVZw7sMh8nfeGtdap5eKNSl/79MSUhBo+AejwWPAqVWs2aT9/kRlw0Ng4anNw9sbGzL1ZGYO9czbxuUfkVKSrf3KwMIvf8yuPD32Tb4uk4u5v2x7mGFxnJpucY52VnYutwq2yKLyvvOKnLOf4V5SE7PYXqN7+4qVUWGAxGc/4DmrTGxcOHFeOGA2Bjr6Feq4fNcS8eOYBBr6dmg2acjwjFwbma+Xo0FotT5PLxcH5ZOA0VKuoG3foS6lazlvnLYlFey8pPcSf3bEFTzY1qnrcqJNZ2DmQkJ7L0refM28jNTCuzvIrK+uSeLWjbdjJX3lITY7Gxd0DbrjONH+3BzmWzOLp9Hfm52ZU6ZkVyszJITbiGtt3jJfKXnXZrX5xreFGQV3KMftGPTfnZmSRdOsvupdPRVK9B8563hjsU5OXg4uVHbkYqjm4eWNnak512w3QvQMXJnSG419KSeeM6R3dswLF6Dfq89hEqlQpdbg6Jl6JYMKY/AEZAl5vNgjH9KdDl4xFQz7wdW3sNRqOB3KxMbiTE4FWrHl0HjUalUrFp8Ux2/biMXiPeJD83B3cff7LSU3CpYbo+MlNumK+PGjVr0X3oq2To9Py+fDYHf/4/Og55zXS883JQqVSseOt5HN086DZmIid+28iSV0qO3QQjutwc/G/exxJjrxFQtz6Xok7xxuTZ/Pi/OYSsXMjgseNLHoecbNw9vM1/Z2dmUFBQQLtOt1rUndy9yEy+9VlTkJdDNW+/YsfNHl1eDo43e4Cc/WMHBXk5WNnYYtCXfhbptcgI9iydjkqlIqDlrevFytaegtwcHKt7kJWSxKnf1+MWEMiN6AuEr/sfjm6e9H7tI7JSrnN8Rwg1amnJupFE4uWzZKUmYzQaUalUWNs5oMvLxsmt5OegSqUics8vdH1pHGC6fo/X8GHl+7eu3zotH2bLvMnEnD1hKv/cbBa9YjoX1Go1AU0fui2mBV516uPi6c3S94aZ3lerSbxygSM71pvKKz8PtYUlXh2eMJdXdtoNLCytyMvOxKWGF+nXSz6rfcPXHxNz9gQF+Xmo1BacObAL3c37etE9WpeXg5dPfVRqNXnZmeb77u1yMzNIib9Gg/ZdShyz/NxsdLnZOLq6Uc3T5+YPrmoMBoM5jl/jICI9fFgz0TQnhrW9hlot2rP9m6nEnTtB0XkHsOL1AajUajxq1+e7dwfh6OZBy17PcXrPFnzqNMDV04dv3jJ1EfeureXhvs+xZ+1yXGp4kpWWitvNHxHUajVGg4HMlFs/3B/bs428nGxadR/A4a3rcLj5meLuV5vo08fM+U2Ji8bVqya63Gyc3TyxKX5fU1tg66Ahv4xhKkXlWc3bj1N7fqFem47Yu1QvcT8CuHoinJ2LPzfvW3F79+7lzTffxNfXl9GjR5e5DVH1SYusuCt6vZ7U1FSqV69ebrrZs2cTHh5Ohw4deO655zh16lSltxEcHFyiEgumiXpmzZpFhw4dmDVrFoWFhZWqHCcmJnL69GmCgoIICgpixowZxMfHVzovd8U9iHjbtqVe2ZZeGG+71CytrNHll57coSwGo7FUd+i83FycXN1pNOQjaj42gMbDp5Bx9TRpF4+XSFenz8t88b8fmL7ke5q8PJPmo7+k+egvcW/2GGn5RiKi0zEYjdT31GBlZYMuv+SX1CJqCwssbzsmQIn0Qb0G8uTbn1HdJwBXbz/c/OqQHHMFtYUFFlZWWFhZmSe0sCz2/9s9PGA4eTlZnNi9hR8+Gk1U+F6ad33SnF6ttsDC0sr8b/G4RoMeO0dnnnr3c1r0eo5e78wgIeoksWeOENRvGLqcLAryc7FzroZBr6fj8HdBpeapSd/Q4NEe1Gr5CNW8/anm5cdD/V9EX1hAga5kmWxdMRffwEbUa9GWXiPfonaTINr3Gcioz5cw6vMljJy2EFQqLCytyM5IY9ePS+kz6l0srawxGG79AHQydDsOTtV4dvx0nps4i2GfLUKlVhPY+hGGfbqIYZ8uotHDXTAYSn7xtLAsfRza9A7m6Xen4eYbQHVvP9z96pAccxm12gJLSyssrKzNZaRSW1B8Si+L245FUbnuXjkPr7oNqdOyPQa9vszt3ukYVnScbt/mndYtKw9Fy4riGI16c6yo8L1k3khi6OdLGTP/J2zsHTgXbuqKlpORxoH1pjFUltY2oFKZuyXeHqeIf+NWPPnWp6jUKq6ePFSizIoqBOXlp4jBoCdy7zZcPH1KlKMpTmGJbZRXXkVxmnTqZY7RutdAfLRNcarugau3Hw8/M4KLhw/c9THb8908bDXOuNesUyJ/t6dXWZT+2lB0fvk0bMkTr01FZWFB+M/Lb61zc59MvSBK7pvBoMfG0Ykeb0yjTd/neeb9mcScO0H0qSOm8rWwQNu2I4OmLjC9psxHpVYzaOoCnNw8sLAqWZ4ABbo8Hun7HIPGT6eGbwDuPv48/txLnAnfZ45pYWVl+tfSCktra/N1bufgSL8x46nha7qPtX/mRS4c2m/ehlptQXXfWvR56xPUFhaEb/weMBI85ZsSL696jXF088Dl5g8XPZ8ZwptT5mBja4ermwdPD32Fw3/sLl2Wt91rv1/4BVZWVtRr1KxU2tvLt3g5FB3/3Mw0wkP+j8eGvomFlTXGMj43fRq05IlXp6JSqYg5dbh0HCsrLhz4DVsnF7q9Pg1rB0c6jXyfhPMnuXbqCGf/2ImdUzWefGcaQX2ex7d+MzKux3Pt5jEsnp/iCnX5uPvXJaCZqVU4KnwvGTeSGPzZUkbNNV2/URF76TzkDZ6fsoDgj03H/vkpC3h+ygLqt+9inmStiKWVFWcO7iEjOYkXZyxj+PSl1Gv1CN51GzDkk4UM+WQhAY2D8KqtNefH8ub5a2llRcEdPpe7DnuTwVMX4t84iNY9n8EnsAm+DZrR+LFu5nu0qti1W5CfX+K+W9xv387DTuOMh3/tYvm2xqDXcyMuGhcPH/M5YGllhdFoMMe5GLGPzBuJDPzkfwydsxYbOwcuHtpHh8GvMeCjb+g/aZ65u+iAj74hsN3jONXwpscbU1Gp1YT9vAwLK2tOHdxNenIiY778P95dsh73mrXY8M3nqG5eE8U/8y2trDEYDeZrpPjnmtrCosS99OGnh5N05Ty63By++3A0WanJ+Gqblvk9oDKfA2oLS86EbqXRY73KTF+zUSt6vfkJarUFB9ctK7Hs4Ycf5n//+x8WFhbMnFl6PPo/TqV6MF9VnFRkxV0JDw9HpVLRuHHjO6bJyckhNzeXFStWEBYWZh6bWll2dqXHDW3ZsoXw8HD27t3LmjVr6NSpU6k0ZbUUe3p60rlzZzZs2MCGDRvYuHEjy5cvL7WuIixt0avtSr9U1lgYC0okzc/NwcKych0idAV6XF1LPtrHzsYKO+96qIs+iG3ssHX1JD81qUS6zk1q8XCTevxy1YhttRrml7XGBV12Bqk5BZxOyMLXxZa83Bws75Ane40TWRlppXe5nH2w0zhRqMvDytae3Mx0CvJyzR92umL/v52Tmyf123bGv1ErHF1r4NeoJe5+dczpbTWO5GamY+vgWCpuoU6Hj7YJllamcaTWtvY41fAhMzkRRzcP6jzUiZqNW+Pk7o1Pgxb4Ng7C0soKRzcP7JyqkZd1axyNtZ0GjEbT66Zje7YSffYEfV5+FwCNsyvO1WtgMBhxcffExd0Te42zqcU9M50dKxfQvGMPPAPqmltyimSmJOPfqAWWVtY4OFfDvWYt7Bwcyc/OwtndE2d3T2wcNKVmki64w48Nt5d9QX4e1nb25GSmo8u9VUYGg77EL+AFtx0LW40j0aeOEBsVSZcX3zYtV6vJzSw9xuhOx7Ci41Te8a8oD0Vxi+IYCgvNsaLC9tCkU29cvWpiq3Gi5s2uzXnZWexdtYgG7TujtrAgJyMdtdrCXA4FubnoCwpL5UltYYFPYGN8tE2Jv3imZJndbBkvLz9FYs4cx07jhJObR4lyLCqT4tsor7yK4rgWa327PQ829g7kZWfc1TE7Fbqd2KhI/Bq1LDN/xdnYaW5f3ZTu5pdfz7qNaPfsaPMkTgA2Do7kZaWb/y3IyzXf//QFOjzrNTFXQq3t7Knm4WNuEbN1cERfUGC+JmwdnLCwtLr5f0dyM291z9XlmlrJy6rA29pryMlMp7BAh52DIzkZ6aZ/b14fRevk5+WUWN/GTkNeVjr6Ap05P3lZGXgHNubR58dwZv8OLCytcHLzNL9izhzn+tXzaNt2Ju+2Y2C6z1phr3EkKyONgoKSP1I6aJzITE8DYP/OzZw/dQwLKyvzmOyy2DpoSmyn6PzMy0rnzzWLqf/IE7j51TH1Iijji6vawgKPuo3wqNeE65fPloxjoSYvM53stGS8tc1NlYm8XGwcnHCq4U1GcoKpstKgORY377t2TtWwcXA09wIo6x5yOnQ7hQUFPPr8rd5RUWF7aNqpN9VuXr++9Ztz49plLKxM5WuncSpR1vbO1UpNyKTLy+XS0YM072y6D1T39qPbyLe4cvIQNvYanN09cazuDqpb+Sm6P+qKnZe3c3CuhrO7J06u7iRdvUDSlfP0HvMBtva37tF2xa5dC0vLEvfdIif3biPm3En8m7QiJ+NWeehyc1GpVFhYWuLs7mlepsvLxVDs3nQhfA+NHuuFi6cvtg6OeNdvRkrMZSwsTZ9jthon8z44unlg71SN/OxMvOo15uHgMZz7YycFeblEHT5Aqy59cfOuiZ3GiW6Dx3I2IhQrKxtyMk3XRvbNPOTn5WAoLDRfF8U/14AS91Jnd08GfjgHSytrHF1roKnmho2dA7Y3r7niZVJQRvkUZ+PgyPUrUdhqnKnm7Vfm/UhtYWHat+fGcPaPHSWWWVpaEhQUxKRJkwgJKT3Dvvh3kIqsqJDBYCA5OZndu3czYcIEBg0ahKNj6a5pxdOPGjWKjRs3kpqaivpm15i/IyfH1FUmPT2dvXv3snDhwlKVVn9/f0JDQ0lKSuLAAdMEKr179+bQoUNcvWoaY7Zy5UomTJjwt/Jyt3RqZ6wNaea/byTGU1iow6GCbsVFUjJzaNbs1q/xtlZqrK2sSEtLNb9nNBjQZaRg4+Jufq+Wqx3PtfRi0Z/XyMi/1T21jb8zndq2IjPGNMGG0WgkJiYWfaHujl2d/erV52rUafPfacmmCnPx9L9880mJL/uWNraoLS3xqtuQhItnuB59EU01NzKSE9AXFmBbRhfmIh61tNyIu0r06aM8POBF87oAHgFa4i+ewaOW6d/icY1GY4nzwmgwkJ2WjMbVNC7MPSCQ1LirxJ09Ruv+L3Lj2iXsXUxxoyPDiY86YV732ilTC5zm5iN2Yi+cZft3C+j/2iQ0zrd+WPCuoyX2wq2ySbh6AQcnF2LPnyHyz9+J2LGBGS/2Jj8nm7iLZ/h51iQObl6DU3V3Cor9umw0GNDrC8hKuzX+3DQhya0vnunXTWV3u03zphJ3oVjZW5vK3rtuA3MZOVZzM1UOjEaSrl0ypy1etmCaxffKyQh6jJ6Ag3M1rkdfxM6pWoljm5ly/Wbaco5hOcepouNfXh6K4hbFybyRZM6/Qa8nJ/3WdeF8szu80Wjg7MHdnNj1Cwa9nnMHd5Gdkcq5g7vZ9+NSCm+Lc/bALg5vvfUoCFdvfyh2D7sefRHbm+d+efkpcj5iH3VatTenLdrGH+uWm9MWbaO88iqKU9wv33yCjYOjOW7i5ShsHBwrfcwSLp1l3+pFdB89AR9tUxIu3Vrn9nMDTN2qi8tMTqRQl1+i4qqysCjRBd7dP5CkS2dx96/H9UvnSLl2CXuX6mQmJ5quV0PJazYzJRmnm2M5PWppib9DnnwCG5N+/VYPmysnTY+Cs9M48tOcycScv3Vdxl06i8bFFUsra7zraIm5cBrvOvWJPX+GhKsXcKxWnbTrCehyc7kRH2NeL/HKOeydq2FhZc25g7vJy8ok8ZKpsmfaRyMOxcoo8dI5QlcvptvoCfg2aEbCRVPahZ9P4PCfeygsKMBB48TlqNM4V6uOlVXJydsC6jXk0rlILkWdYs3/vmLgyDfRFxaW+3nhHhBozhOYxhbaOVYj8dJZLoTvIXLXJpa/2h9dbjZJl8+ydd7HnNi+lovhu4n87dYX/GrefiVabFNiLmHr6ELS5XM4VHOjsEBH5o1E9IUFWNnZk5N6A8fqHmhc3dAX3LqX1fCvR15WhnliqeSb129RHhMvnSN01ULUlha4FBv7azDoyckodv26e91835Sn289Hj1pa8/hkwHytoFKViJN9855atG+etQLJz8ki7ub1kRR9EXsnF/QF5d+XwHT9XD4RQa+xH+DgXA1rW4di47cDiT5zzByn6L5bJP7iWXb/sIjer3xATW2TEtdnUvRFU68FlRrPWoHEXzxjut8XFJB+I8kcx1RGaeb1nG6WUdG+3bh2CXsnUzff82G7ybiReOt8tbAATI89UqlUZBe7V2beLCMP/zrEnj9j/lxLu5mHtORE8+Pmij7XvhjZlwVj+pvvpeFbfgQgOfoS9i6uRJ8+SqMO3Yi/ZPocSLh0676Wfj2Bwgo+B2rUCiTu3AlqtWh/M+5F87UWFbabY9tvPRpJbaE233M2b95cosHCwsICi5v7Lv59pCIrKhQVFUWHDh349NNPCQ4OZty4ceWm12g0zJw5k0WLFtG1a1d2797N5MmT/1Ye+vXrR0BAAD179uSbb75h4MCBXLp0ifxi3YDGjRtHaGgojz/+OPPnm57NV7NmTaZPn8706dPp3bs3UVFRzJ49+2/l5W7lq11QGwsJ222a8W9nyPdomwaZuuRgGhNVfBzk7ZLSs3F0dMTL2QaAWtXtiYxNJfnsIbIvHqYwM4Wrv/2AQV+Ao199AJxsLHn9UX+2nrnO1dRcbCzV2FiaLvf4jHxeG9AFVUEux0O3U6+GhnkLFlGvWJ7ybstT7YbNyMvOImK3aebEP7ZvAEy/hhaldatZi9A1i0m4eJbLxw5y9UQERoMRg0GPLjebfasX4de4FYd+/ZGaDVugVluguznO8Ha1W7Ql/sJpvAMb4VazNoe3rcO/cSvzsrjzpzAYTXH3rlqEf+NWRPzyIz6BjbhyPIzTf/5GZnI8EetXoC8owKOuaXyxf7O2JF06g0fdRrj61OLkzp/xbWiaBMQ7sBk56akc3vQd0SfCOLrlB5w9fFCrLchKT2HNzA9o2+tZvGoFosvLNec9sGV7rp2L5Mqpoxj0eg7+shZtq/bk5WbTZdBoXp7+PwJbtsOvYXO8amvpPuJtGrTrTL2gh7l49CDnIkLJTLnO3rXLUKlU3IiL5urpYxj0eq6cOmoaf3tzJtaDW9bgXa/RrXMr11T27jVrs2fVIuIvnuHisYNcOREBBiMGo4H8nGx2/7AQ/yZBhP/yIzUbNCf+/GkuHjtIQX5+ibLNTk/l5O5fABUF+XnkZWdx6Je11GneFl1uNmf+MOXDlObmL/G5ZZ+/5R0nv3KOf0V5KCzIJ+78KfZ8v4CaDZpzZEcIvvWboi8sxKteIyL3/srxXVs4tX8n5w7uAZWK5GuXGDZ9OV5161O/fWds7DU4urqjUqtJvnYJv4amODVvxqnmVZMDG7/nwuE/yEhOIP7CaYwYuXbGdFwOb1uHX2PTRHTl5afIlZOH8K3fzFwm184cw8XDm8i9W3G+2apVtI3yyuvyiXC865XsDePmW4voyMPERUUSvnk1f4Z8i53GqVLHLCc9lc1zPyaoxzPU8K+Hb4Pm5vwZ9HqObFuH381zo4hHLdPkOkVxT2xfi3stLcd+Wc2FsN2kJ8ZyZPP31Gp5a0yxX7M2JF48jcFoQJebzcGfFuPbsBUntq/Fo24jrkWGc/7g76Rfj2f/uuXoCwvM53mdFm2JjTpVouwDbuapVfenKdTls/+nZRj0evb/tAwnNw/Uagtq+NVm67fziD4XSdSRA+z56f8I6tIXAO3Na9Zg0JOXk8X2ld9Qp2lr/ti0mmqe3uz8YRGXIo9w8fCfhK1fSZNOvQGo5uXLlRPhxJ47SdTB3YRt+A4be425jHLSU9ky92Na9XgGd/96uPnVJT8niz93/YpvQF2+XzAD/zpaTh4+wMYflvBw1z4U3nbtBDZuTk5WJrM/fI3uTw/m1NFwtI1boNPl3/Gzwr9ZWxIunCL27HEMej3Ht/+Mf7M26HKzafvMSzzz8UL8m7XBu34zagQE8nDwaOq1fwJnz5oc3fIDV4/9SeaNRBIvngGMxJ8zxYnc+TN+TdtSkJuN2sKKayfD+PP7udSo05Ajm7+jsECHR61A6rZ+lMvHw7h4aD9ZKddJvnYJQ2EBRoMeg17P0e0/U6uZ6Xw88dtGfpn3Ma7efvjWb06hTkdW6g30hYV41zVdvyd3b+HMHzs5F37r+i3rfPQJbEJBXo7576LPFt/Axhzf/SuHtv3Mib1b2fLNNLzrNjQ/R7ZOy3bciL1KbmY6kfu2c+jXdVjZ2OHXyHSdAXe8N53Y/QsqVBTk55KXncWVSNNwgFP7d1KnRTviL57F3a8OGOHQ1nX4NmiGvrCQ7PRU1n/1EQ/1fhaPgHr4NWxBTNQpom/e6w/9avrhzGg0UFCgIzbqFL9/943p3rQthJo343jWbcSZ0K2c3vML5/7cyYWbZXQj5rL52HsFmu4RLp41OX9gF7kZaRzfEcLhTd9h7+KKT4Pm+NVvwpFdv3Dw13Uc3f0rIfM+xbdeQwJbtiMvN5sCXT7XzkWy7f/mEdCoBeFb1xHQsDn6wkJe+/oHXp7+P0Z9voRBUxdQw68OKrWa6j5+5mvUytqGwNYdaNH1SWKjTmE0mnoC7Vm1iIBKfA4ABDRrS3baDWzsNaZ92/EzNRuZjn81T18ObfqeS0dM9+iIjd9TJ8g0aVTt2rWZN28eO3fuJCYmhnnz5tGtW7cyt/GPut+zE/9LZy1WGSuatUeI/zi7Fq9WnKiiGIVJeHMWWzt7DAYDb3w2Dy8/0/iYj18aQP8Rr9OsbelZEsHUghu6dhHz5n9DocGICpi64wKRh/5kwUvdmTbtc/44doo6fV7G6WZFtmtgdZ5r6V0q1otrTgLQ1t+F6smRTJ30PrZ29hQU6nnlk3l4+ZlaW6a+/AxPvfgaTdrcytPJsH1899VUbOzs0RcWkpudyVchoUx9+RnaD3yZgKYPsXvlXM4fCsXeyZn67btga+9I6I9LsLCypiAvB1uNM2Dk6fEzqe4TwLJ3BpGdmszry02PVChqfExLjOX7D1/GaDBgY6fB0saWgR9+bZ5Q4viuzexbtcg01rhY3AHvzyQjOZEt80zPi3T28OHhQa/hWdf0pTg9KY6fp4wGowFrOwcsbWzp+/4c7J2qYdAXsm3uh8SdPYZKpUZtaUXf8bNp3LA+YVt/Zsd3C0qV54erTBM8Hdq5ke0rF2Br74CVjS0vfjKfmKjTrP9mGja2dhgMBp6bOIud387j4f5D+HXJTB4fNAa1pSWh61aQEncNlxrePPHiG1yPvsTv3y/E5mash58azM5v52Fta4fRYKDn6Pf5+csPeOfbHfzvncF0fH40tZu14bdvvyYqPBR7JxcaPtwFWwdH9qxebC4jO0dnjEYjAyd8Scy5E/y+cj7WtvbYODiay/bojhD2FXveYpGRc9aQcPEM2xZPx8rWDkNhIfk5WbyxYjvL3x3CY8+Ppk5L06/mGckJrHhvKG+s2F7ucaruE8CytweRlZrMGytuPVKjMnkoep6gjZ0Ga3sHjAY9HV94Bf8mQexfu5QLh/aTl5WBV50G+DZoRvjm1abytLYl+KOvib9whi3zp5rHsNnYa7Cxc8Bg1NNp0CvUbdWeM3/+zp8h35Kfk03doEeo7u3P/p+WYXPzvOn1ykTWTH0dS2ubO+anTsv2pCXFsXLCCEZ/E4K1rZ25TGzsHDBiNI3PzMsrsY2yysvCyppvxw+n+8vvo217a2iFvrCQXSvncu7ALvSFBVha22Dn6MzAD+eWe8wefW40GckJhK4pXdZqC0us7Uzn38BJX5eYHCwjOYH/GzcUS2sbU1y9gV7vzODGtYvs+3Y2FpbW1G79GO0Gvoylta15vdN7thD20xLT+MG8XGw1ThiN0OudGWTeSOT3RZ8CUM3Th8eHvYFPsR9sjv++mT2rFpU4hkX3gt9WfM3Jvb+CSoUKeHr8FzRs2hJ9YSFfvPQkRqMBx2puNO3QlQ5PDjL/WBdx85otKmv7m9fH4A9mEr5jPcf2bsfeyYXGnXoT1CvYvN65A7+zb9Ui8rMzsbCyws7RhWc/nIu9czWO7VjP/jLK09raBhs7e3JzslCrLXB2daN9px7s37mZ4JfeokW7x0qkX/H1p/xRxiPaqtfwpNWAl6jVoj2ZyYmsmjCMl/9n+oH01O4t/PnjYqzt7LG0seWpD+aQePEMu5Z+gZWNHUajgT7vfsH+Vd+QlhBDu+dewb95ey6G7eLI5u/Q5WQT0PJhXLz8OLR+BVZ29lhZ29J7/FckXTrD3uUzsbC0pCA/F5VajZO7D/nZGXQc/Bq1W7bnyvEwwtavJDXhGs7uXtRs3IqTv2+6eR7ZMGDi1yRcPMP2RdNKTHpXpNerH+PfJIg/1i7lwuH95N68fn3qN+PQltV3PB9P7vmF3SvnYufkgtFg4OnxM3H38mHvj//j2O+bUaHCO7AR3Ue8jUuxSbSO/raJXd8vwGgwoFKpsbF3IHjiLNx8AwBY9MbzZKUm8863t7qrHt4ewp5Vi0rlvdvId/l9pekeXZCfR2FBAbYOpsc2GQwGHh88lozriewuY121hSU29qaZj7PSUug1+n22L5t9655ir8HG3gGjwUC74NHUbBxE2LplXDryB3lZ6XjUboC3tilHf/3RfOy7vjyR9dPe4OX/bSXq4C4OrF1CXmY6FlbWWFrb0Pe9mdQN8Oe31Us4tHMjKlTU1Dam96h3cfXw5mzEftZ/Mw21Wo0uLxfbYnnoNvRV6hebfTlLV8hPn7+Hu19tju/aYt6X/Nwchn62BMfqNczXr/mzSOOMESPPTJiJm08A/3vL9DkwZum2EmWTnhTHqokjUKstzOdR/w9uHf+oA78TvnEl+TnZ1Gn1CA8Hj+a9LqbHg23cuJGvv/6azMxMunXrxsSJE8sctvZPsnuy9L3hQZC78eX7nYW/RSqy4h8TFxdH3759y1zWvn37B/aB1UpUZAG+nTeW6AtnqVW/MY7FPogry8ZSjZOtJWm5BXx3RJkJq7p4q7l28Sy1tI3RVCJPaTeul5n+clrOnddJjCUl/houHt6kJsTgVach9k4uZaa9ffhW0bo+2ibY3Pas3KJlzh7epMXH4FW3ZNxs3Z27s6cnxZEWH41XYBOsb4ubnZpM8tXz1KjTADtHF7wcSz+3tSwpCbEkx17Fv0EzbOxNMTNSrhN/KQrfwEZYOlSuKzmYZqK9ERtNzQZNsbFzIDMlmYTLUfjUa4iNxvmu4qTcnDwkNSEG72JllJoYy/XY6DLLFsou+6zUZBIvR5Uq6/JUdJwqs25ZeXBwrkZOZnqZ+VeXcR7diLuGb/2y42RnpJdYVlyxXq9/OT+V2a/blyldXrfHKe+Tv7z8FclKTSbxShTOfvWxc6zcOZmRFEdawjWc3L1JT4yhRp2GJdZ1sr1z97+yjmGR2KhILp84RONHn8ClhjeO1pWbfyAlIZbrsVep7unLjfhr+AY2wqFYGaXkle7Gfys/caTGm66f2+8ht/NX67hy/ix1GzSp9L0/9UZSmetEJKTecZ30JFOevIvd17JTk7l+9TweN+9nRXSFdz4Bio6TZ70mWNuZngqQnWa6L3rUbmh+TimAvfWdW3TKKqOs1GSSrpzHq27J/FiUM+lMRedj0blY9NlibVm5CWxSE2OJjYrEwtIK/0YtS11n5V0jRfdW3/q37tGJV6LwrtuQ/NzsEsvKm0/n9jhgmj8h8XIU9i7VyM1Iu7WN/NIzThcp69gXd/t5UMOh/M+1os8ujYsr2empJT7XisvS3fpRorxrtGiZi2fZ97W8cs7H9JvnkXclrrU3O9Qqd/n99G+pyEZFRTFhwgSio6MZMGAA48aNKzWXx+2WLl3K8uXLycvL4+GHH2bq1KlUq3b334PLIhVZ8Y8pLCwkISGhzGW2tra4ubmVuex+U6oiu3HVx4rEAVhzvOxyvFsDmnhUnKgSyqvI3g0lJ9ArryJ7Nypbka1Ivl6Z/OgNyt2yCxWM9SC5vSL7d/xLi6jcL+l3I1t35y/Xd6u8iuzdqGxFtiLlVWTvRnN3F0XiQPkV2btRXkX2bpRXkb0b5VVk71ZlK7IVUeoaUWrXyqvI3q2KKrKVVbwi+3eUV5G9Gw90RbbfkvudhTLlbhhV6bQ6nY7u3bvzyCOPMHLkSD799FO6devG00/f/vixWyIiIpgyZQpz587FwsKCzz77DFdXV6ZPn65E9uU5suKfY2lpia+vb8UJhRBCCCGEEA+Mffv2kZWVxYQJE7Czs+Ptt99mypQp5VZkT5w4waOPPkrt2qbhdL169WL16tWK5anqj/IVQgghhBBCCHHPnD17lmbNmpnHG2u1Wi5evFjuOvXq1WPnzp1ER0dz48YN1q1bR/v27ctd525Ii6wQFVCqS/CTz09RJA7AkIljFImz/lRSxYkqoYl3+eNWKqtQr1w/zgAX24oTVUJs5p0f2H43rC2U6V9mpVAcAEuF+uAaFOqDp1aoD56SXaaVKiOl8qRUt2mlLjUfJxtlAgHH4rMrTlQJtpbKdAl21yjzFWnDOWXuswA+znd+nuzdcLRRphu3xQPYHFKg0Mmt1LWvFI21co+QKf5Ivr9DqTKy/S/URh7QGYJ1Oh06XcnnWVtbW2NtXbr7eVZWVomelSqVCrVaTXp6Os7OZc+V8Oijj+Lv70/Xrl0BaNKkCaNGVb47c0UezFIVQgghhBBCCHHPLF68mFatWpV4LV5c9sRUFhYWpSq4NjY25OXl3TH+r7/+SlxcHFu3biUsLIx69erx3nvvKZb//8JvIEIIIYQQQgghinn55ZcZPnx4iffKao0FcHZ25vz58yXey87Oxsrqzj1FfvnlF5577jnzGNmJEyfSqlUrMjIycHKq/NMc7kRaZB9AISEhaLVaGjRoQMeOHfniiy9KNPvHxMSg1WrvYw6FEEIIIYQQlaJSPZAva2trNBpNidedKrJNmjTh+PHj5r9jYmLQ6XR37FYMoNfrSU5ONv+dlJRkfl8JUpF9QAUGBhIaGsqkSZPYvHkzU6bcGl/p7e1NRETEfcxd5XTu3JmwsLB/bD0hhBBCCCGE8lq3bk1mZiYbNmwAYMmSJbRv3x4LCwuysrIoKCg9P0HLli1Zu3Ytq1evZv369bz99tu0aNFCsefIStfiB5RarcbNzY0uXbpgY2PD6NGjee+993BxcUGtVivSHC+EEEIIIYQQFbG0tOSTTz7hnXfe4YsvvkCv1/P9998D0LdvXz744AO6dOlSYp2hQ4eSlJTEggULSE1NpUWLFnz22WeK5UlaZKuAdu3aoVKpOHPmDHDnrsX79++nR48eNGvWjODgYKKjo83LDhw4QJ8+fWjRogUjR44kISHBvCwiIoInn3yS1q1b884775CRkQGYujgPHjzYnK74douWrV27lvbt29OuXTu2bdsGwIgRI9BqtcTGxjJkyBC0Wi1LllT8IOjy1vvmm294+eWXzWmvXr1KkyZNyMzMZN68eYwcOZIXXniBVq1a8dZbb5GVlWVOu2/fPvr06UNQUBATJ04sNTubEEIIIYQQ94pKpXogX3erS5cu7Nixg6lTp7J161bq1asHwK5du0pVYsE0GdSkSZMIDQ0lMjKS7777Dj8/v79dnkWkIlsFWFpa4uLiQkpKSrnpxo8fz4ABA9i+fTuBgYHMmTMHMFVAx4wZw/Dhw9m6dStOTk5MnToVgPj4eEaNGsWgQYMICQkhOzub999/v1L5On/+PNu3b2fVqlU89dRTTJ8+HYB58+YRERGBl5cXixYtIiIigmHDhlUYr7z1evbsyZ9//mmuoO7cuZMOHTrg6OgIQGhoKAMGDODnn38mNjbWvO/R0dGMHTuWoUOHEhISwqlTp1i6dGml9k8IIYQQQghxi4eHB126dMHV1fV+Z0UqslWFSqXCWMGzGm1sbNDpdGg0GqZMmcLMmTMB2LJlC0FBQfTv3x9PT0/GjRvHM888A8CmTZto0aIFzz77LDVr1mTKlCn8/vvvXL9+vcI85eTkMGPGDAICAnjmmWeIj48HwN7eHicnJ9Rqtfn/dxo4Xlx569WqVYvatWuze/duAH777Td69uxpXrdly5b069ePgIAAXnrpJXbt2mXe94YNGzJgwAD8/PwIDg42LxNCCCGEEEJUTTJGtgrQ6/WkpqZSvXr1ctPNnj2br7/+miVLlqDVavnggw9o2rQpCQkJ+Pj4mNN5enri6ekJmFpkiz/c2MPDA2tra3OltLjbnxNVp04d3NzcAMqdelspPXr0YOfOnbRr145z587RqVMn8zIvLy/z/z08PMwzpCUmJnL69GmCgoIAU1na29vf87wKIYQQQggB/KVuvKJi0iJbBYSHh6NSqWjcuPEd0+Tk5JCbm8uKFSsICwszjwcFUyUvJibGnPby5cv069cPg8GAt7d3iWWJiYnodDq8vb1RqVQlpseOjIwssU2NRlNuvivTinw36/Xs2ZN9+/axZcsWOnTogIODg3lZbGys+f9xcXG4u7sDpkp7586d2bBhAxs2bGDjxo0sX778rvMkhBBCCCGEeHBIRfYBZTAYSE5OZvfu3UyYMIFBgwaZx4PeKf2oUaPYuHEjqampqNVqDAYDAL169eLw4cOEhIQQHx/PwoULqV69Omq1mr59+3L06FHWrl3LtWvX+Pjjj+nSpQtubm54enpy4cIF0tPTSU5OZtmyZXe1D/7+/oSGhpKUlMSBAwf+9np+fn7Url2b+fPnl+hWDHDs2DHWr1/PlStXWLp0KU888QQAvXv35tChQ1y9ehWAlStXMmHChLvaDyGEEEIIIcSDRSqyD6ioqCg6dOjAp59+SnBwMOPGjSs3vUajYebMmSxatIiuXbuye/duJk+eDICvry8LFixgxYoV9OrVi4yMDKZNmwaYWiwXL17MDz/8wFNPPYW9vT2ff/45AG3atKFDhw706dOH0aNH8+abb97VPowbN47Q0FAef/xx5s+fr8h6PXr0QK/X07FjxxLvd+rUiQ0bNvD000/j5+fHK6+8AkDNmjWZPn0606dPp3fv3kRFRTF79uy72g8hhBBCCCH+MtUD+qriVMa/0vdTiPvg6tWrbNmyhcuXL/Pll1+a3583bx6xsbHmWZOVtuNMxRNfVcaTz09RJA7AkIljFIljMChz+Tfxdqg4USUUKpQfgJpOtorEic3MVySOtYUynxhWCsUBUOrub1AokFqhMURKnkeW6gcrTwplB71BmTgutspNtXEsPluROLaWyvxG765RZt+upir3yDcfZ2Xmo7CxUKaMFAqjKKUuf6WufaWGRir5bV2p+5FSZaTUZ8jodgGKxLkXHJ5Zcb+zUKbsn4bf7yz8LTLZk/jHxMXF0bdv3zKXtW/fnrlz55a7/lNPPYWrqyuLFy++F9kTQgghhBBCVBFSkRX/mBo1arBhw4Yyl9naVtx6duTIkTLff+211/5OtoQQQgghhLhnZNbie0MqsuIfY2lpWeJRP0IIIYQQQgjxVzyAoxuEEEIIIYQQQog7kxZZISqw5niCInGUmqAJYOVnC5UJ5FNfkTCDh3ZSJI6VQpO0ADgrNAlNkKeLInGOJKYpEicjT19xokpSauIgC6UCKUTJHlxKTbDyoJVRbLoyExC1qWmjSByAuNRcReJEJ2UpEmdYBz9F4ig5IdLWE0mKxHG0U2bSqLa1XRSJU6jQ5GMA3k7K7JtSk88pFSc9r1CROKDcPTIzX5nPowft/ngvSNfie0NaZIUQQgghhBBCVClSkRVCCCGEEEIIUaVI12IhhBBCCCGEuEeka/G9IS2yVUxISAharZYGDRrQsWNHvvjiC3S6W2OdYmJi0Gq19zGHQgghhBBCCHFvSUW2CgoMDCQ0NJRJkyaxefNmpkyZYl7m7e1NRETEfcxd5XTu3JmwsLD7nQ0hhBBCCCFEFSRdi6sgtVqNm5sbXbp0wcbGhtGjR/Pee+/h4uKCWq3GycnpfmdRCCGEEEIIgXQtvlekRbaKa9euHSqVijNnzgB37lq8f/9+evToQbNmzQgODiY6Otq87MCBA/Tp04cWLVowcuRIEhJuPW4mIiKCJ598ktatW/POO++QkZEBmLo4Dx482Jyu+HaLlq1du5b27dvTrl07tm3bBsCIESPQarXExsYyZMgQtFotS5YsqXA/O3fuzEcffcTDDz/MzJkzGTNmDG3btiUyMhKAHTt20K1bN5o3b87gwYNJTEysMC9CCCGEEEKIqkkqslWcpaUlLi4upKSklJtu/PjxDBgwgO3btxMYGMicOXMAUwV0zJgxDB8+nK1bt+Lk5MTUqVMBiI+PZ9SoUQwaNIiQkBCys7N5//33K5Wv8+fPs337dlatWsVTTz3F9OnTAZg3bx4RERF4eXmxaNEiIiIiGDZsWKViZmVlMXbsWJYuXUr//v2pW7cuoaGhpKWl8fbbbzNmzBh27NiBi4sLCxYsqDAvQgghhBBCiKpJuhb/C6hUKoxGY7lpbGxs0Ol0aDQapkyZgsFgevr4li1bCAoKon///gCMGzfO3Lq7adMmWrRowbPPPgvAlClTePTRR7l+/XqFecrJyWHGjBm4ubnxzDPPsGzZMgDs7e0BU/doe3v7u+oG3a9fP2xsbHBzc6Nr1678/vvvFBYW4uDgwJ49e3BwcCAyMpKCggKuXLlSYV6EEEIIIYS456Rn8T0hLbJVnF6vJzU1lerVq5ebbvbs2YSHh9OhQweee+45Tp06BUBCQgI+Pj7mdJ6ennTq1Akwtcj6+vqal3l4eGBtbU18fHyp+Hl5eSX+rlOnDm5ubgBYWVn9tZ27jY2NTYl/ixiNRmbNmkWHDh2YNWsWhYWF5or6vcqLEEIIIYQQ4v6RimwVFx4ejkqlonHjxndMk5OTQ25uLitWrCAsLIygoCAmTpwIgJeXFzExMea0ly9fpl+/fhgMBry9vUssS0xMRKfT4e3tjUqlQq/Xm5cVjVUtotFoys13ZVqRK2vLli2Eh4ezd+9e1qxZY66IVzYvQgghhBBCiKpFKrJVkMFgIDk5md27dzNhwgQGDRqEo6NjuelHjRrFxo0bSU1NRa1Wm1sse/XqxeHDhwkJCSE+Pp6FCxdSvXp11Go1ffv25ejRo6xdu5Zr167x8ccf06VLF9zc3PD09OTChQukp6eTnJx81911/f39CQ0NJSkpiQMHDvyt8sjJyQEgPT2dvXv3snDhQsUqyUIIIYQQQvwdKpXqgXxVdVKRrYKioqLo0KEDn376KcHBwYwbN67c9BqNhpkzZ7Jo0SK6du3K7t27mTx5MgC+vr4sWLCAFStW0KtXLzIyMpg2bRpg6ma8ePFifvjhB5566ins7e35/PPPAWjTpg0dOnSgT58+jB49mjfffPOu9mHcuHGEhoby+OOPM3/+/Lsug+L69etHQEAAPXv25JtvvmHgwIFcunSJ/Pz8vxVXCCGEEEII8WBSGaXpSohyvbjmpCJxrCyV+91o5WcLlQnkU1+RMIOHdqo4USUoWUYtfRwUiaOtdufeDnfjSGKaInFydIaKE1WSWqEfYy2UCqQQJX9kVuoT8kEro9h0nSJx2tRU7rnl608kKhInOilLkTjDOvgpEufc9VxF4gAcvZyqSBxHO2Xmi2hb20WROIXK3dbwdlJm39QK3UiUipOeV6hIHFDuHplboMyBU+r++GaHWorEuRdcBn1/v7NQprQfXrjfWfhbZNZi8UCIi4ujb9++ZS5r3749c+fO/YdzJIQQQgghxN/3b+jG+yCSiqx4INSoUYMNGzaUuczW1vafzYwQQgghhBDigSYVWfFAsLS0LPGoHyGEEEIIIYS4E6nIClGBAU08FImz/lSSInEAxca2EntWkTBGY0eF4jx4Q/aVypJSvYoetLGWSjIoVNZKzmL4oPUGU+rwK1XWFgoWkLuTMr1vdHoFB1wqIFfBce2FCu1bXoG+4kT/IAWnR0Cp0lbqzDYo9CFiZaHctVao0A1AqfuI1QN2n70XpGvxvSGzFgshhBBCCCGEqFKkIiuEEEIIIYQQokqRrsVCCCGEEEIIcY9I1+J7Q1pkH0AhISFotVoaNGhAx44d+eKLL9Dpbj3zLyYmBq1Wex9zeO+FhYXRuXPnSr8vhBBCCCGE+O+QiuwDKjAwkNDQUCZNmsTmzZuZMmWKeZm3tzcRERH3MXeV07lzZ8LCwv7Suq1atWLTpk2Vfl8IIYQQQgjx3yEV2QeUWq3Gzc2NLl26MG3aNDZs2EBaWpp5mZOT0/3N4D1maWmJRqOp9PtCCCGEEEI8kFQP6KuKk4psFdCuXTtUKhVnzpwB7ty1eP/+/fTo0YNmzZoRHBxMdHS0edmBAwfo06cPLVq0YOTIkSQkJJiXRURE8OSTT9K6dWveeecdMjIyAFMX58GDB5vTFd9u0bK1a9fSvn172rVrx7Zt2wAYMWIEWq2W2NhYhgwZglarZcmSJXe1z3fbtXjHjh1069aN5s2bM3jwYBITEyvMpxBCCCGEEKJqkopsFWBpaYmLiwspKSnlphs/fjwDBgxg+/btBAYGMmfOHMBUAR0zZgzDhw9n69atODk5MXXqVADi4+MZNWoUgwYNIiQkhOzsbN5///1K5ev8+fNs376dVatW8dRTTzF9+nQA5s2bR0REBF5eXixatIiIiAiGDRv2l/e/Imlpabz99tuMGTOGHTt24OLiwoIFCyrMpxBCCCGEEKJqklmLqwiVSoWxgodq29jYoNPp0Gg0TJkyBYPB9FjwLVu2EBQURP/+/QEYN26cuXV306ZNtGjRgmeffRaAKVOm8Oijj3L9+vUK85STk8OMGTNwc3PjmWeeYdmyZQDY29sDpi7Q9vb297wbtIODA3v27MHBwYHIyEgKCgq4cuVKhfkUQgghhBDiXpNZi+8NaZGtAvR6PampqVSvXr3cdLNnzyY8PJwOHTrw3HPPcerUKQASEhLw8fExp/P09KRTp06AqUXW19fXvMzDwwNra2vi4+NLxc/Lyyvxd506dXBzcwPAysrqr+2cAoxGI7NmzaJDhw7MmjWLwsJCcyUeHpx8CiGEEEIIIZQhFdkqIDw8HJVKRePGje+YJicnh9zcXFasWEFYWBhBQUFMnDgRAC8vL2JiYsxpL1++TL9+/TAYDHh7e5dYlpiYiE6nw9vbG5VKhV6vNy+LjIwssc2KJl2qTCuyErZs2UJ4eDh79+5lzZo15kp6EZkcSgghhBBCiH8Xqcg+oAwGA8nJyezevZsJEyYwaNAgHB0dy00/atQoNm7cSGpqKmq12twq2atXLw4fPkxISAjx8fEsXLiQ6tWro1ar6du3L0ePHmXt2rVcu3aNjz/+mC5duuDm5oanpycXLlwgPT2d5OTku+6S6+/vT2hoKElJSRw4cOBvlUd5cnJyAEhPT2fv3r0sXLjwH6lACyGEEEIIURGVSvVAvqo6qcg+oKKioujQoQOffvopwcHBjBs3rtz0Go2GmTNnsmjRIrp27cru3buZPHkyAL6+vixYsIAVK1bQq1cvMjIymDZtGmDqZrx48WJ++OEHnnrqKezt7fn8888BaNOmDR06dKBPnz6MHj2aN9988672Ydy4cYSGhvL4448zf/78u1rXaDSiVlfu9OzXrx8BAQH07NmTb775hoEDB3Lp0iXy8/PvaptCCCGEEEKIqkFllKYr8QAJCwujdu3arFy5ktOnTz8QEzP9eipJkTjrFYoD8P3KPcoEij2rSJgXJoxWJI6VpXK/rbXyVaZLeaDLnXtC3I1j19MUiZNX8ODdstUK/ahrUGjXlMoPgFI/WKsVCqTUvl1N1SkS5xF/Z0XiAOy9nKZInNjUHEXidG/opkicY7HZisQBiIxOVSSOnY0yc3121JY/d8f94KZRZi4MC4WuWaVuR3mFhooTVVKhQjfbbJ0yebKxVKaUXn+kliJx7gX34T/e7yyU6fqKgfc7C3+LzFos/jFxcXH07du3zGXt27dn7ty5zJ07lxMnTlCrVi2+/PLLfziHQgghhBBCKOvf0I33QSQVWfGPqVGjBhs2bChzma2tLQA//PDDP5gjIYQQQgghRFUkFVnxj7G0tCzxqB8hhBBCCCGE+CukIiuEEEIIIYQQ94r0LL4npCIrRAUupykzcUgTbwdF4gAMHtqp4kSVYDR2VCTO958vUiQOltbKxAFGrpusSByfanaKxEnMzVMkTlK2crNxZ+TpK05UmTgKTfhRoNAEJDpFJ0VRKo4ygfQKldHKb/cqEufhT59SJA5ATRdlrv8AVxtF4pxNylUkTr6C52NysjITR9koNNmTdSN3ReJYKPgMDaXuay62ForEUWrGOEuLB68mZG+lzIFT6t4v/nvk8TtCCCGEEEIIIaoUaZEVQgghhBBCiHtEZi2+N6RFVpQrJCQErVZLgwYN6NixI1988QU63a3nD8bExKDVau9jDoUQQgghhBD/NVKRFRUKDAwkNDSUSZMmsXnzZqZMmWJe5u3tTURExF3H7Ny5M2FhYUpmUwghhBBCCPEfIV2LRYXUajVubm506dIFGxsbRo8ezXvvvYeLiwtqtRonJ6f7nUUhhBBCCCEeSNK1+N6QFllxV9q1a4dKpeLMmTPAnbsW79+/nx49etCsWTOCg4OJjo4GYMSIEWi1WmJjYxkyZAharZYlS5aY19uxYwfdunWjefPmDB48mMTERMDUxXnw4MGsXbuW9u3b065dO7Zt22Ze78CBA/Tp04cWLVowcuRIEhISzMv27dtHnz59CAoKYuLEiSW6RgshhBBCCCGqHqnIirtiaWmJi4sLKSkp5aYbP348AwYMYPv27QQGBjJnzhwA5s2bR0REBF5eXixatIiIiAiGDRsGQFpaGm+//TZjxoxhx44duLi4sGDBAnPM8+fPs337dlatWsVTTz3F9OnTAVNlesyYMQwfPpytW7fi5OTE1KlTAYiOjmbs2LEMHTqUkJAQTp06xdKlS5UvGCGEEEIIIcQ/RroWi7umUqkwGst/5peNjQ06nQ6NRsOUKVMw3HyGor29PWDqrmxvb1+iW7KDgwN79uzBwcGByMhICgoKuHLlinl5Tk4OM2bMwM3NjWeeeYZly5YBsGXLFoKCgujfvz8A48aNM7cYb9myhYYNGzJgwAAAgoODWbduHWPHjlWmMIQQQgghhCiHdC2+N6QiK+6KXq8nNTWV6tWrl5tu9uzZfP311yxZsgStVssHH3xA06ZNy13HaDQya9Ysdu7cSd26ddFoNOYKMECdOnVwc3MDwMrKyvx+QkICPj4+5r89PT3x9PQEIDExkdOnTxMUFGTOf1FlWgghhBBCCFE1SddicVfCw8NRqVQ0btz4jmlycnLIzc1lxYoVhIWFmcemFldWq+6WLVsIDw9n7969rFmzhk6dOpVYrtFoytyel5cXMTEx5r8vX75Mv379MBgMeHp60rlzZzZs2MCGDRvYuHEjy5cvv9vdFkIIIYQQQjxApCIrKmQwGEhOTmb37t1MmDCBQYMG4ejoWG76UaNGsXHjRlJTU1Gr1SVaVgH8/f0JDQ0lKSmJAwcOAKYKMEB6ejp79+5l4cKFFXZhBujVqxeHDx8mJCSE+Ph4Fi5cSPXq1VGr1fTu3ZtDhw5x9epVAFauXMmECRP+alEIIYQQQghxV1Qq1QP5quqkIisqFBUVRYcOHfj0008JDg5m3Lhx5abXaDTMnDmTRYsW0bVrV3bv3s3kyZNLpBk3bhyhoaE8/vjjzJ8/H4B+/foREBBAz549+eabbxg4cCCXLl0iPz+/3O35+vqyYMECVqxYQa9evcjIyGDatGkA1KxZk+nTpzN9+nR69+5NVFQUs2fP/uuFIYQQQgghhLjvVMbKNHkJ8R/2zR9XFImjV/BSi4zPUSSOUpf/958vUiQOltbKxAH+WDdZkTg+1ewUiRN6OVmROEnZ5f+wczcy8vSKxMnWGSpOVAkFBmXOR12hMvkBUCpUoUGZQHqFymjlt3sVifPDp08pEgfgclquInEs1Mq0MsSmK/OotvTcQkXiABw4EadIHBsbZaZIeeGxAEXiWCjYrKJX6Jp1sbVQJI5SrV5Kfoco1CsTq0CpOArd197sUEuROPeC98sh9zsLZYpb3P9+Z+FvkcmehBBCCCGEEOJeqfq9eB9I0rVYCCGEEEIIIUSVIhVZIYQQQgghhBBVinQtFkIIIYQQQoh75N8wQ/CDSCqyQlRAqXuPUpMrAFhZKtOZQrG53pSapKlQmclVAFw1yuQpKUOZyZXsLJSZOKSGg40icQDiM7IUiaPURC22VsoEis1TbnIda4V2zlaha1apiYyUUqDQJFag3ERWSlEqO4VKzT4EWFsr87XN2lqZ+5FSp6NawQGEeh6s8+jfPKeqUt+PHrDbmqhCpGuxEEIIIYQQQogqRVpkhRBCCCGEEOIeka7F94a0yD6gQkJC0Gq1NGjQgI4dO/LFF1+g093qdhkTE4NWq72PORRCCCGEEEKI+0Mqsg+wwMBAQkNDmTRpEps3b2bKlCnmZd7e3kRERNx1zM6dOxMWFqZkNu8JrVZLTEzM/c6GEEIIIYQQ4gEkXYsfYGq1Gjc3N7p06YKNjQ2jR4/mvffew8XFBbVajZOT0/3OohBCCCGEEKIc0rX43pAW2SqiXbt2qFQqzpw5A9y5a/H+/fvp0aMHzZo1Izg4mOjoaABGjBiBVqslNjaWIUOGoNVqWbJkiXm9HTt20K1bN5o3b87gwYNJTEwETF2cBw8ezNq1a2nfvj3t2rVj27Zt5vUOHDhAnz59aNGiBSNHjiQhIcG8bN++ffTp04egoCAmTpxYomv0nXTv3t28X48//jharZZffvkFgA8++ICpU6ea0/7xxx906NABg8HA+++/z1tvvUX//v156KGHmDJlCgUFBea0GzZs4IknnqBNmzbMnj37Xz2LoBBCCCGEEP92UpGtIiwtLXFxcSElJaXcdOPHj2fAgAFs376dwMBA5syZA8C8efOIiIjAy8uLRYsWERERwbBhwwBIS0vj7bffZsyYMezYsQMXFxcWLFhgjnn+/Hm2b9/OqlWreOqpp5g+fTpgqkyPGTOG4cOHs3XrVpycnMwVzejoaMaOHcvQoUMJCQnh1KlTLF26tML9XLdunbnL9MaNG4mIiOCJJ54AoEePHuzcudNcCf3tt9/o3r07arXpNN61axdvvPEGK1euZP/+/fzwww8AHDp0iEmTJvHBBx/w3XffsXHjRjZt2lSZYhdCCCGEEEI8gKQiW4WoVKoKWxJtbGzQ6XRoNBqmTJnCzJkzAbC3t8fJyQm1Wm3+v7W16TmbDg4O7Nmzh27dunH16lUKCgq4cuWKOWZOTg4zZswgICCAZ555hvj4eAC2bNlCUFAQ/fv3x9PTk3HjxvHMM8+YlzVs2JABAwbg5+dHcHAwu3btqnAfNRqNuct00f+trKwAU6t0QUEBR48exWg0smvXLnr27Glet2vXrjz22GPUr1+fQYMG8fvvvwOwfv16unbtSseOHQkMDKRv376VyosQQgghhBB/m+oBfVVxMka2itDr9aSmplK9evVy082ePZuvv/6aJUuWoNVq+eCDD2jatGm56xiNRmbNmsXOnTupW7cuGo0GQ7GH3NepUwc3NzcAc6USICEhAR8fH/Pfnp6eeHp6ApCYmMjp06cJCgoy59/e3v7udvo2lpaWdO3alZ07d2JpaYlaraZ58+bm5V5eXub/16hRg+TkZHNewsLCzHkpKCiQGZ+FEEIIIYSowqQiW0WEh4ejUqlo3LjxHdPk5OSQm5vLihUr0Ol0zJ07l4kTJ7J582ZzmrJadbds2UJ4eDh79+7FwcGBH374ocQ4WI1GU+b2vLy8CA8PN/99+fJl3nrrLUJCQvD09KRz586MGzcOAIPBQG5ubqX3906tzz179mTSpElYWVnRvXv3EoPnY2Njzf+Pj4/H3d0dMFWwg4ODGTp0KACFhYUlKupCCCGEEEKIqkW6Fj/ADAYDycnJ7N69mwkTJjBo0CAcHR3LTT9q1Cg2btxIamoqarW6VIXN39+f0NBQkpKSOHDgAGCqAAOkp6ezd+9eFi5cWKnJkHr16sXhw4cJCQkhPj6ehQsXUr16ddRqNb179+bQoUNcvXoVgJUrVzJhwoRK77u/vz979+4lMTGxxGOGHnroIXJzc1m1alWJbsVgGjO7d+9ezp49y6pVq8xja/v168fvv/9OcnIyer2er776yjx2WAghhBBCiHtJpVI9kK+qTiqyD7CoqCg6dOjAp59+SnBwsLl18040Gg0zZ85k0aJFdO3ald27dzN58uQSacaNG0doaCiPP/448+fPB0wVvYCAAHr27Mk333zDwIEDuXTpEvn5+eVuz9fXlwULFrBixQp69epFRkYG06ZNA6BmzZpMnz6d6dOn07t3b6Kiopg9e3al933y5Ml8++23dO3alTVr1pjft7Cw4IknnqBatWo0adKkxDrdu3dn7ty5DBkyhI4dOzJw4EAAgoKCeO211xg3bhz9+vWjoKCAjz/+uNJ5EUIIIYQQQjxYVEZ5DomoIvLy8khJSWHhwoW4urry1ltvmZe9//77+Pj48Nprrym+3QV/XlEkTl6hct2ZL94o/0eGylLq8l/xecUzUldKYcWPaKqsM799qUiczNxCReJEp+UoEidXr1ckDsDx+CxF4lgo9JOolYUyvw7Hpit3HlkrtHNqhX74tlAo0PzFvysS5/+mPqlIHICraXmKxFGqjOIyCipOVAmp2cqdj8fPJysSx8bGQpE4we1rKhLHQsGWoQKDMp9rLrbKlJFSlBwQVahXpowKFSprpeK8/kgtReLcC36vPZhPy4ie1/d+Z+FvkTGy4h916NAhRo8eXeayp59+utzux+np6fTo0YOAgACWL19+r7IohBBCCCGEYv4N3XgfRFKRFf+oJk2asGHDhjKXOTg4lLuuh4cHx48fL3NZ0bNthRBCCCGEEP9+UpEV/ygbGxt8fX3vdzaEEEIIIYQQVZhM9iSEEEIIIYQQ98j9np1YqVmLo6KiePrpp2ndujUzZsy4q7lW3nrrLT755JO73mZ5pEVWiApk65SZYiHAxVaROADOtg/WpTty3WRF4rhqrBWJA9Cgy7uKxAnbpEy3dSPKTGah5Px8DT3sFYmjVJ4Umu+Dms42ygQChY7ag2fNtP6KxEnNU24iI61b+cNLKkupS8TPWZl7v7+TMvsFENfQXZE4Sk0al5qrzIRYSnKwVqaNRqfQhEiGB3BOVaUmRFNq12wtpV2tKtDpdIwePZpHHnmEr776ik8//ZSQkBCefvrpCtcNDQ3l4MGDbN++XdE8yZkjhBBCCCGEEOKO9u3bR1ZWFhMmTMDPz4+3336bdevWVbheXl4eU6ZM4Z133sHJyUnRPD1YzTpCCCGEEEII8S/yoM5arNPp0OlK9qyxtrbG2rp0D7mzZ8/SrFkz7OzsANBqtVy8eLHCbSxYsIC8vDwsLS05cOAAbdu2Vaw8pEVWCCGEEEIIIf5jFi9eTKtWrUq8Fi9eXGbarKysEhO2qlQq1Go16enpd4wfFxfHihUr8Pf3Jy4ujpkzZ/Lqq68qNiRJKrL/ESEhIWi1Who0aEDHjh354osvSvwCExMTg1arvY85vLeOHj1Kt27d7nc2hBBCCCGEeCC8/PLLHD58uMTr5ZdfLjOthYVFqZZaGxsb8vLy7hg/JCQENzc3VqxYwdixY1m5ciURERH88ccfiuRfKrL/IYGBgYSGhjJp0iQ2b97MlClTzMu8vb2JiIi465idO3cmLCxMyWwq7tSpU7z66qsUFDx4k1IIIYQQQoh/OdWD+bK2tkaj0ZR4ldWtGMDZ2ZmUlJQS72VnZ2NlZXXH3U5MTKRt27bmmBqNBn9/f2JiYipVbBWRiux/iFqtxs3NjS5dujBt2jQ2bNhAWlqaeZnSA7AfBDk5Obz66qs899xz9zsrQgghhBBCVElNmjTh+PHj5r9jYmLQ6XQ4OzvfcR1PT0/y8/PNfxsMBhISEvD29lYkT1KR/Y9q164dKpWKM2fOAHfuWrx//3569OhBs2bNCA4OJjo6GoARI0ag1WqJjY1lyJAhaLValixZYl5vx44ddOvWjebNmzN48GASExMBUxeDwYMHs3btWtq3b0+7du3Ytm2beb0DBw7Qp08fWrRowciRI0lISDAv27dvH3369CEoKIiJEyeWGpxeFktLS9asWUPr1q3/WkEJIYQQQgjxH9e6dWsyMzPZsGEDAEuWLKF9+/ZYWFiQlZVVZs/HHj16sHv3brZv305CQgKzZs1Cp9PRsmVLRfIkFdn/KEtLS1xcXEp1Ebjd+PHjGTBgANu3bycwMJA5c+YAMG/ePCIiIvDy8mLRokVEREQwbNgwANLS0nj77bcZM2YMO3bswMXFhQULFphjnj9/nu3bt7Nq1Sqeeuoppk83PaczJiaGMWPGMHz4cLZu3YqTkxNTp04FIDo6mrFjxzJ06FBCQkI4deoUS5cuBaBNmzYEBQWVep05cwZra2s8PDwULj0hhBBCCCEqR6VSPZCvu2Fpacknn3zCxx9/TPv27dm+fTvvvPMOAH379mXv3r2l1qlduzZfffUVCxcu5IknnmDv3r0sWLAAjUajSLnK43f+w1QqVYWzhtnY2KDT6dBoNEyZMgWDwfSAeHt7e8DUJdne3r5Et2QHBwf27NmDg4MDkZGRFBQUcOXKFfPynJwcZsyYgZubG8888wzLli0DYMuWLQQFBdG/f38Axo0bZ24x3rJlCw0bNmTAgAEABAcHs27dOsaOHUtISEiZ+1GjRo2/WDJCCCGEEEKI4rp06cKOHTs4efIkLVu2xNXVFYBdu3bdcZ2OHTvSsWPHe5Ifqcj+R+n1elJTU6levXq56WbPns3XX3/NkiVL0Gq1fPDBBzRt2rTcdYxGI7NmzWLnzp3UrVsXjUZjrgAD1KlTBzc3N4ASA8QTEhLw8fEx/+3p6YmnpydgGix++vRpgoKCzPkvqkwXX0cIIYQQQghxb3h4eDwwvR2la/F/VHh4OCqVisaNG98xTU5ODrm5uaxYsYKwsDDz2NTiymrV3bJlC+Hh4ezdu5c1a9bQqVOnEsvv1J3Ay8urxCxmly9fpl+/fhgMBjw9PencuTMbNmxgw4YNbNy4keXLl9/tbgshhBBCCPGPut9diJXoWvwgkorsf4jBYCA5OZndu3czYcIEBg0ahKOjY7npR40axcaNG0lNTUWtVpdoWQXw9/cnNDSUpKQkDhw4AJgqwADp6ens3buXhQsXVurBx7169eLw4cOEhIQQHx/PwoULqV69Omq1mt69e3Po0CGuXr0KwMqVK5kwYcJfLQohhBBCCCFEFSYV2f+QqKgoOnTowKeffkpwcDDjxo0rN71Go2HmzJksWrSIrl27snv3biZPnlwizbhx4wgNDeXxxx9n/vz5APTr14+AgAB69uzJN998w8CBA7l06VKJ6bfL4uvry4IFC1ixYgW9evUiIyODadOmAVCzZk2mT5/O9OnT6d27N1FRUcyePfuvF4YQQgghhBCiylIZK9NUJsR/2Mw9lxSJE+Biq0gcgAxdoWKxlNDCw0WROK6ash/C/Vc06PKuInHCNk1XJE50erYicXIL9YrEAShU6Pav1MeIQaFPI4OCH2v/1g9IF5s7P8D+bqTmVfwYtMqqZqvM9a/U4S+4rQfSX+Xv5KBIHIC4rFxF4uTqlbmPpOaWftzG/WZloUx3SaXOIyXvR0qxUCtTRrpCZfZNqWM2qq2/InHuhbrvbr3fWSjThS973O8s/C3SIiuEEEIIIYQQokqRiqwQQgghhBBCiCpFHr8jhBBCCCGEEPfIv2GG4AeRVGSFqICXozLjtmIzy5/s6m4EebooEkepoTs+1ewUiZOUoVwZKTW2tU3f9xWJc/iXGYrEyVBwTJpS4211emXGEio1JlGv4Jg0pcbtKjWOWKl9C3BRZtzmgZMZisQB8HNR5vgrNPwPJxtlviKdTVGujNr6lv/s98pS6po9HJ+qSBwlp2vRKxQqU6fM/VGp89FCwYqQhUL9MR2slQmkzNko/ouka7EQQgghhBBCiCpFWmSFEEIIIYQQ4h6RnsX3hrTICiGEEEIIIYSoUqQiKwgJCUGr1dKgQQM6duzIF198gU5369mAMTExaLXa+5jDv2fbtm106tSJRx55hC1bttzv7AghhBBCCCH+JqnICgACAwMJDQ1l0qRJbN68mSlTppiXeXt7ExERcdcxO3fuTFhYmJLZvGtRUVG8++67jB07lmXLljF37lwuXbp0X/MkhBBCCCH+O1Qq1QP5quqkIisAUKvVuLm50aVLF6ZNm8aGDRtIS0szL3Nycrq/GfyLfvrpJ9q0acMzzzyDVqtl0KBBbNy48X5nSwghhBBCCPE3SEVWlNKuXTtUKhVnzpwB7ty1eP/+/fTo0YNmzZoRHBxMdHQ0ACNGjECr1RIbG8uQIUPQarUsWbLEvN6OHTvo1q0bzZs3Z/DgwSQmJgKmLs6DBw9m7dq1tG/fnnbt2rFt2zbzegcOHKBPnz60aNGCkSNHkpCQYF62b98++vTpQ1BQEBMnTjR3jT579ixt27Y1p2vatCmnT59WsLSEEEIIIYQQ/zSpyIpSLC0tcXFxISUlpdx048ePZ8CAAWz/f/buP67K+v7/+OPwQwyOxCfYAn+k33SeLDNJzDCdippTpKHDYjn8Mc0J1bbsE4k/StQU9aPTUCDSaK7MnDtC0lTMCHEjQT81M21a/goVzImagoLA9w8/ncVUQH0bB33edzu3ebiu9+t6X9c55zq9zvt9va4NG2jfvj0LFy4EIDExkYKCAgICAkhJSaGgoIBRo0YBcPLkSSZMmEB0dDRZWVn4+PiQlJTkiLl37142bNjAihUrGDJkCAkJF+8FWlhYSHR0NKNHj2bdunV4e3szffp0AA4dOkRMTAwjR47Ebrfz+eefs3TpUgDOnj1Ly5YtHfGtVqsjcRYRERERudEsFud8NHa6/Y5clsViqfMG5R4eHpSXl2O1WomPj6eq6uItrT09PYGLU5I9PT1rTEv28vLio48+wsvLi507d1JRUcGBAwccy0tLS5kzZw5+fn4MGzaMZcuWAZCZmUlQUBBDhw4FIDY21jFinJmZyb333ktERAQAkZGRrF69mpiYGFxdXWnSpEmNPp87d+46j46IiIiIiDQkJbJyicrKSkpKSvD19a11vQULFrBo0SJSU1Ox2WxMmjSJTp061dqmurqa+fPns3HjRtq1a4fVanUkwABt27bFz88PAHd3d8ffi4qKaNGiheO5v78//v7+ABQXF7Nr1y6CgoIc/f8umb799ttrjCyfPXu2RlwREREREWl8NLVYLpGfn4/FYqFjx45XXKe0tJSysjLS0tLYunWr49rU77vcqG5mZib5+fnk5OSwcuVK+vTpU2O51Wq97PYCAgIoLCx0PN+/fz/h4eFUVVXh7+9PSEgI6enppKenk5GRwRtvvAHA/fffzz/+8Q9Hu927d3PnnXfW70CIiIiIiFwnFxeLUz4aOyWyAkBVVRXHjx8nOzubuLg4hg8fTrNmzWpdf9y4cWRkZFBSUoKLi0uNkVWA1q1bk5uby7Fjx8jLywMuJsAAp06dIicnh+Tk5DqnMAOEhoayfft27HY7R48eJTk5GV9fX1xcXBg8eDDbtm3j4MGDACxfvpy4uDgABgwYwPvvv8+XX35JaWkpb731Fj169LimYyQiIiIiIs5BiawAF++32rNnT2bOnElkZCSxsbG1rm+1Wpk3bx4pKSn079+f7Oxspk2bVmOd2NhYcnNz6du3L4sXLwYgPDycNm3aMGjQIJYsWcITTzzBvn37OH/+fK3ba9myJUlJSaSlpREaGsrp06eZNWsWAK1atSIhIYGEhAQGDx7Mnj17WLBgAQD33HMPv/rVrwgPD6dXr15UV1fz5JNPXuNREhERERERZ2Cprs9wmEgj98UXX1BcXExwcHCN4k/18db2wrpXqofjpRVG4gAE+fsYiWPq09/e//JTwq/WsdO1/6BxNUztW7fHJhqJs/39OUbinC4z9z4qu1BpJE55ZVXdK9VDRZWZOJUGv9aqDIUy9VVrat/a+155xs3VeOezo0biANzlc3Xn5isxNVvO28NMGZELpt5EwMMta69dUV+mPrPbj5YYiWPyP0UrDYX69ryZ86Op96OrwRKzTdzMxHI3tHNm3o3w6653GYpk3n2Tsxq6C5f1+SuPNnQXrouKPckt4Z577uGee+5p6G6IiIiIiIgBmlosIiIiIiIijYpGZEVERERERG4Qi8Gp4fJvGpEVERERERGRRkUjsiJ1OG+oKEYTV3O/xv1v8UkjcUz9QFhcds5InNtcXY3EAajGTMUPU0WauoS+aCTO229OrnulejJVXMlUoY4qQ0VxTFYwrHKyeoimevP1qVIjcdr/qKmROAAnyy4YiWPolI2ri5liP6fPmYkD8OH+Y0biNHUzM45RYegzW2mwIJaroQJEnu7ONdZjsmhYhaGKWKZOjxqslGulRFZEREREROQGUbJ+YzjXz00iIiIiIiIidVAiK9jtdmw2Gx06dKB3797MnTuX8vJyx/LCwkJsNlsD9vD6ffLJJwwYMKChuyEiIiIiIgYokRUA2rdvT25uLlOmTGHt2rXEx8c7ljVv3pyCgoKrjhkSEsLWrVtNdvOafP755zzzzDNUVFQ0dFdERERE5BZjsVic8tHYKZEVAFxcXPDz86Nfv37MmjWL9PR0Tp486Vjm7e3dsB28RqWlpTzzzDP88pe/bOiuiIiIiIiIIUpk5RLBwcFYLBZ2794NXHlq8ZYtWxg4cCAPPPAAkZGRHDp0CIAxY8Zgs9k4fPgwI0aMwGazkZqa6miXlZXFgAED6Ny5M1FRURQXFwMXpzhHRUWxatUqunfvTnBwMOvXr3e0y8vLIywsjMDAQMaOHUtRUZFj2ebNmwkLCyMoKIjJkyc7pka7ubmxcuVKunbtav5AiYiIiIhIg1AiK5dwc3PDx8eHEydO1Lreiy++SEREBBs2bKB9+/YsXLgQgMTERAoKCggICCAlJYWCggJGjRoFwMmTJ5kwYQLR0dFkZWXh4+NDUlKSI+bevXvZsGEDK1asYMiQISQkJAAXk+no6GhGjx7NunXr8Pb2Zvr06QAcOnSImJgYRo4cid1u5/PPP2fp0qUANGnShDvvvNPwERIRERERqZ+GnkJ8s04t1u135LIsFgvVddwgzMPDg/LycqxWK/Hx8VT93z0pPT09gYtTkj09PWtMS/by8uKjjz7Cy8uLnTt3UlFRwYEDBxzLS0tLmTNnDn5+fgwbNoxly5YBkJmZSVBQEEOHDgUgNjbWMWKcmZnJvffeS0REBACRkZGsXr2amJgYMwdDREREREScihJZuURlZSUlJSX4+vrWut6CBQtYtGgRqamp2Gw2Jk2aRKdOnWptU11dzfz589m4cSPt2rXDarU6EmCAtm3b4ufnB4C7u7vj70VFRbRo0cLx3N/fH39/fwCKi4vZtWsXQUFBjv5/l0yLiIiIiMjNR1OL5RL5+flYLBY6dux4xXVKS0spKysjLS2NrVu3Oq5N/b7LjepmZmaSn59PTk4OK1eupE+fPjWWW63Wy24vICCAwsJCx/P9+/cTHh5OVVUV/v7+hISEkJ6eTnp6OhkZGbzxxhtXu9siIiIiIsZZLM75aOyUyAoAVVVVHD9+nOzsbOLi4hg+fDjNmjWrdf1x48aRkZFBSUkJLi4uNUZWAVq3bk1ubi7Hjh0jLy8PuJgAA5w6dYqcnBySk5PrnMIMEBoayvbt27Hb7Rw9epTk5GR8fX1xcXFh8ODBbNu2jYMHDwKwfPly4uLirvVQiIiIiIiIk1MiKwDs2bOHnj17MnPmTCIjI4mNja11favVyrx580hJSaF///5kZ2czbdq0GuvExsaSm5tL3759Wbx4MQDh4eG0adOGQYMGsWTJEp544gn27dvH+fPna91ey5YtSUpKIi0tjdDQUE6fPs2sWbMAaNWqFQkJCSQkJDB48GD27NnDggULrv1giIiIiIiIU7NU12c4TOQWtiz/kJE45y9U1b1SPV2oMvOxNTWtJMDa1Eic21xdjcQBqMbMMbr7jstPd79aXUJfNBLn7Tcn171SPVVUmXlPmnpnVxl6X5v8Uqtysq9IU73xbdrESJxjZbX/CHk1TpZdMBKn0tAb0uc2M+ej0+cqjcQB8GpiZvyhqZuZOBWGPrOVhuIAuLqY+WJzso++se99k9wMHWtT/y3yVLfWZgLdAIHxHzZ0Fy7rk5dDGroL10UjsiIiIiIiItKoKJEVERERERGRRkW33xEREREREblBboYKwc5II7IiIiIiIiLSqGhEVqQOpopQuLua+znOVPEQU0Uxjp01U/Dlx14eRuIA9bqtU32cLqswEsdUkabho14xEgdg6dKJRuJUGjrWzlfKxNz7yBRThbXKLpg5h5j8NdzUOdLQac1oASJTTpSaed2aupt5J3m6m3kHmDzULoZimRpBM3UKMVVYCcwVjjIVx+CuyS1GiayIiIiIiMgNYtHc4htCU4tFRERERESkUVEiK9jtdmw2Gx06dKB3797MnTuX8vJyx/LCwkJsNlsD9vD6LF68mIceeoiOHTvy+9//njNnzjR0l0RERERE5DookRUA2rdvT25uLlOmTGHt2rXEx8c7ljVv3pyCgoKrjhkSEsLWrVtNdvOqvffee7z33nssXbqU999/ny+++ILXX3+9QfskIiIiIrcOi8U5H42drpEVAFxcXPDz86Nfv354eHgwfvx4XnjhBXx8fHBxccHb27uhu3hNjh49yuzZs+nUqRMAgwYN4h//+EcD90pERERERK6HRmTlEsHBwVgsFnbv3g1ceWrxli1bGDhwIA888ACRkZEcOnQIgDFjxmCz2Th8+DAjRozAZrORmprqaJeVlcWAAQPo3LkzUVFRFBcXAxenOEdFRbFq1Sq6d+9OcHAw69evd7TLy8sjLCyMwMBAxo4dS1FRkWPZ5s2bCQsLIygoiMmTJzumRv/mN7+hS5cujvX279/PXXfdZfBoiYiIiIjID02JrFzCzc0NHx8fTpw4Uet6L774IhEREWzYsIH27duzcOFCABITEykoKCAgIICUlBQKCgoYNWoUACdPnmTChAlER0eTlZWFj48PSUlJjph79+5lw4YNrFixgiFDhpCQkABcTKajo6MZPXo069atw9vbm+nTpwNw6NAhYmJiGDlyJHa7nc8//5ylS5de0t99+/axceNGIiMjDRwlEREREZG6WSwWp3w0dppaLJdlsVjqvH+ih4cH5eXlWK1W4uPjqaq6eF86T09P4OJ0ZU9PzxrTkr28vPjoo4/w8vJi586dVFRUcODAAcfy0tJS5syZg5+fH8OGDWPZsmUAZGZmEhQUxNChQwGIjY11jBhnZmZy7733EhERAUBkZCSrV68mJibGEbeyspJJkyYxbNiwRl24SkRERERElMjKZVRWVlJSUoKvr2+t6y1YsIBFixaRmpqKzWZj0qRJjmtRr6S6upr58+ezceNG2rVrh9VqdSTAAG3btsXPzw8Ad3d3x9+Liopo0aKF47m/vz/+/v4AFBcXs2vXLoKCghz9/y6Z/s7ixYv59ttviY2NrccREBERERERZ6ZEVi6Rn5+PxWKhY8eOV1yntLSUsrIy0tLSKC8v59VXX2Xy5MmsXbvWsc7lRnUzMzPJz88nJycHLy8v3n777RrXwVqt1stuLyAggPz8fMfz/fv389xzz2G32/H39yckJMSRpFZVVVFWVuZY94MPPmD58uWsWrWK22677eoOhoiIiIjIdbgJZvE6JV0jK8DF5O/48eNkZ2cTFxfH8OHDadasWa3rjxs3joyMDEpKSnBxcakxsgrQunVrcnNzOXbsGHl5ecDFBBjg1KlT5OTkkJycXOcUZoDQ0FC2b9+O3W7n6NGjJCcn4+vri4uLC4MHD2bbtm0cPHgQgOXLlxMXFwfAl19+yX//938zdepU/P39OXv2bI0kV0REREREGh8lsgLAnj176NmzJzNnziQyMrLOKbhWq5V58+aRkpJC//79yc7OZtq0aTXWiY2NJTc3l759+7J48WIAwsPDadOmDYMGDWLJkiU88cQT7Nu3j/Pnz9e6vZYtW5KUlERaWhqhoaGcPn2aWbNmAdCqVSsSEhJISEhg8ODB7NmzhwULFgDw7rvvUlZWxosvvsiDDz7Igw8+SGho6DUeJRERERERcQaW6voMh4ncwlI/PmgkjslpJf86e8FIHFcXM53yamLmN7Efe3kYiQPUa6S/Plo186x7pXo4csbMTIDho14xEgdg6dKJRuJUGjrWzvhl5GxfkVV1r1IvzdzNXFl0tsLMuQjg2/JKI3EqDR2kpm5mzo9ny029anD+gpn3Y1N3M/vm6W7m3F9l8GPmZuh7zdR3tpOdQgC4YPKAG2DoJWN8cBszgW6AbrNzGroLl7U1rldDd+G6aERWREREREREGhUlsiIiIiIiItKoqGqxiIiIiIjIDaKqxTeGRmRFRERERESkUdGIrEgdTBVFMFWAAswVRjDl9DkzRVqOnj5jJA7AvXeaKdJUdsHMvlVUmSn4YqpAE8DYsQlG4qS8/qKROKYKK5krreN8TBWOuWAokMXgMIOrqVguZvatwtC531RRPYDySjPnI1PjGJ7uRsIY/U4z9Z3t7upkX7QGOdt/Q4hcKyWyIiIiIiIiN4jJH/3k3zS1WG4JX3/9NZ9++mmd96sVERERERHnp0RWsNvt2Gw2OnToQO/evZk7dy7l5eWO5YWFhdhstgbs4fWZOXMmjz/+OJMmTaJv3758+eWXDd0lERERERG5DkpkBYD27duTm5vLlClTWLt2LfHx8Y5lzZs3p6Cg4KpjhoSEsHXrVpPdvGp5eXnk5ubywQcf8Ne//pWf/vSnvP766w3aJxERERG5dVgszvlo7JTICgAuLi74+fnRr18/Zs2aRXp6OidPnnQs8/b2btgOXqPbbruNGTNm4OXlBcA999zDqVOnGrhXIiIiIiJyPZTIyiWCg4OxWCzs3r0buPLU4i1btjBw4EAeeOABIiMjOXToEABjxozBZrNx+PBhRowYgc1mIzU11dEuKyuLAQMG0LlzZ6KioiguLgYuTnGOiopi1apVdO/eneDgYNavX+9ol5eXR1hYGIGBgYwdO5aioiLHss2bNxMWFkZQUBCTJ092TI3u3LkzDz30EAD/+te/WL16NY8++qjhIyYiIiIiIj8kJbJyCTc3N3x8fDhx4kSt67344otERESwYcMG2rdvz8KFCwFITEykoKCAgIAAUlJSKCgoYNSoUQCcPHmSCRMmEB0dTVZWFj4+PiQlJTli7t27lw0bNrBixQqGDBlCQsLF24MUFhYSHR3N6NGjWbduHd7e3kyfPh2AQ4cOERMTw8iRI7Hb7Xz++ecsXbq0Rl9XrVpF7969+dGPfsTQoUMNHSkRERERkdpZLBanfDR2SmTlsiwWS533dPTw8KC8vByr1Up8fDzz5s0DwNPTE29vb1xcXBz/btKkCQBeXl589NFHDBgwgIMHD1JRUcGBAwccMUtLS5kzZw5t2rRh2LBhHD16FIDMzEyCgoIYOnQo/v7+xMbGMmzYMMeye++9l4iICO666y4iIyP58MMPa/Q1PDycJUuWsH//fv74xz+aOkwiIiIiItIAdB9ZuURlZSUlJSX4+vrWut6CBQtYtGgRqamp2Gw2Jk2aRKdOnWptU11dzfz589m4cSPt2rXDarVSVVXlWN62bVv8/PwAcHf/953Wi4qKaNGiheO5v78//v7+ABQXF7Nr1y6CgoIc/ff09Kyx3SZNmvDTn/6U3/72t6SlpTFy5Mh6HAkREREREXFGGpGVS+Tn52OxWOjYseMV1yktLaWsrIy0tDS2bt3quDb1+y43qpuZmUl+fj45OTmsXLmSPn361FhutVovu72AgAAKCwsdz/fv3094eDhVVVX4+/sTEhJCeno66enpZGRk8MYbbwDwxhtv8N577znaubm54erqWr8DISIiIiJynRq6OrGqFstNraqqiuPHj5OdnU1cXBzDhw+nWbNmta4/btw4MjIyKCkpwcXFpcbIKkDr1q3Jzc3l2LFj5OXlARcTYIBTp06Rk5NDcnJynVOYAUJDQ9m+fTt2u52jR4+SnJyMr68vLi4uDB48mG3btnHw4EEAli9fTlxcnKMPs2fP5uOPP2bfvn28/vrr/OxnP7umYyQiIiIiIs5BU4sFgD179tCzZ0+aN29OZGQk48aNq3V9q9XKvHnzWLRoEVOnTqV169ZMmzatxjqxsbHExsayfPlyOnXqRHBwMOHh4WRnZzNo0CDat2/PE088wTvvvMP58+dr3V7Lli1JSkpi9uzZzJw5k4ceeohZs2YB0KpVKxISEkhISODrr7+mU6dOLFiwAIC+ffuyf/9+/vu//5sLFy4wbNgwxo4de+0HSkREREREGpyluj7DYSK3sKS/HzASx83F3ByOk2UXjMQxVbGussrMaeRseVXdK9XTvXd61r1SPfh7NjUS51jpOSNxLhg61gBjxyYYiZPy+otG4pj6OjL3LnI+pr6xPd3NXGJRXmnuaJ8trzQSp9LJ/rPG4CEydu5v4mpmQt4dns53qY6pU6S7q5nvRyd7OwJQ5YydMmB8cJuG7sIV9Zy/paG7cFm5z/do6C5cF00tFhERERERkUZFiayIiIiIiIg0KrpGVkRERERE5AYxdSmX1KQRWREREREREWlUNCIr8gMxWVzB1WDhKBNOGyrSZKj+CGCucJCpYjam6r2YLGRjqkjT+KfmGImzJDXWSByTbtKaKMY+Hybfj+ZOa2YCmSys5myqMVRYzQkPkZN9PTrlvTqrDH0hOduxlluPElkREREREZEbxBl/0LgZaGqxiIiIiIiI1GrPnj384he/oGvXrsyZM+eqZvdUVFQQFhbG1q1bjfVHiayIiIiIiIhcUXl5OePHj+e+++7jL3/5C1999RV2u73e7ZcuXcqePXuM9kmJrGC327HZbHTo0IHevXszd+5cysvLHcsLCwux2WwN2EMzTp8+zSOPPEJhYWFDd0VEREREpNHYvHkzZ86cIS4ujrvuuosJEyawevXqerU9cOAAb7zxBi1atDDaJyWyAkD79u3Jzc1lypQprF27lvj4eMey5s2bU1BQcNUxQ0JCjE4fuF5z587l+PHjDd0NEREREbmFWCwWp3yUl5dz5syZGo/vD2Z93xdffMEDDzzAbbfdBoDNZuOrr76q1/6/9NJLPPXUU0pk5cZwcXHBz8+Pfv36MWvWLNLT0zl58qRjmbe3d8N28DoVFBTw4Ycf4uPj09BdERERERFpcK+99hpdunSp8Xjttdcuu+6ZM2do2bKl47nFYsHFxYVTp07Vuo2//OUvnDlzhl//+tdG+w5KZOUygoODsVgs7N69G7jy1OItW7YwcOBAHnjgASIjIzl06BAAY8aMwWazcfjwYUaMGIHNZiM1NdXRLisriwEDBtC5c2eioqIoLi4GLk5xjoqKYtWqVXTv3p3g4GDWr1/vaJeXl0dYWBiBgYGMHTuWoqIix7LNmzcTFhZGUFAQkydPrvFrUnl5OS+99BJTpkzBy8vL7MESEREREWmEfvOb37B9+/Yaj9/85jeXXdfV1ZUmTZrU+JuHhwfnzp27YvwTJ06wYMECXnnlFdzczN8sR4msXMLNzQ0fHx9OnDhR63ovvvgiERERbNiwgfbt27Nw4UIAEhMTKSgoICAggJSUFAoKChg1ahQAJ0+eZMKECURHR5OVlYWPjw9JSUmOmHv37mXDhg2sWLGCIUOGkJCQAFxMpqOjoxk9ejTr1q3D29ub6dOnA3Do0CFiYmIYOXIkdrudzz//nKVLlzpipqSk0KZNGwYNGmTwKImIiIiI1M1icc5HkyZNsFqtNR7/max+5/bbb78kNzh79izu7u5X3O9XXnmFiIgIOnToYPR4fkf3kZXLslgsdZbU9vDwoLy8HKvVSnx8PFX/d4dtT09P4OKUZE9PzxrTkr28vPjoo4/w8vJi586dVFRUcODAAcfy0tJS5syZg5+fH8OGDWPZsmUAZGZmEhQUxNChQwGIjY11jBhnZmZy7733EhERAUBkZCSrV68mJiaGr776ipUrV7JmzRozB0ZERERE5BZz//331yjuVFhYSHl5ObfffvsV22RmZuLl5cXbb78NXPzv/PHjxxMdHc24ceOuu09KZOUSlZWVlJSU4OvrW+t6CxYsYNGiRaSmpmKz2Zg0aRKdOnWqtU11dTXz589n48aNtGvXDqvV6kiAAdq2bYufnx9AjV94ioqKalwg7u/vj7+/PwDFxcXs2rWLoKAgR/89PT2prq5m6tSp/P73v+fOO++8uoMgIiIiIiIAdO3alW+//Zb09HTCw8NJTU2le/fuuLq6cubMGTw8PC4Znd20aVON5xMmTGDkyJH07NnTSJ80tVgukZ+fj8VioWPHjldcp7S0lLKyMtLS0ti6davj2tTvu9yobmZmJvn5+eTk5LBy5Ur69OlTY7nVar3s9gICAmrcNmf//v2Eh4dTVVWFv78/ISEhpKenk56eTkZGBm+88QZHjhxh+/btzJ07l6CgIIKCgjhy5AiPPfYYa9euvdrDIiIiIiJy1Rq6OvGVHlfDzc2NGTNm8PLLL9O9e3c2bNjA888/D8Bjjz1GTk7OJW1atmxZ4+Hh4YGfn5+xIrIakRUAqqqqOH78OJ999hnx8fEMHz6cZs2a1br+uHHjmDlzJg8//DAuLi41RlYBWrduTW5uLnfffTdfffUVwcHBlJaWAnDq1Cm2bdtGcnIybdq0qbN/oaGhJCcnY7fbCQ4OJjk5GV9fX1xcXBg8eDB/+tOfOHjwIK1bt2b58uX87//+L6tWrbrkl6Ann3ySBQsW3LC5+iIiIiIiN6N+/fqRlZXFZ599xoMPPsgdd9wBwIcffliv9n/605+M9keJrACwZ88eevbsSfPmzYmMjKxz3rrVamXevHksWrSIqVOn0rp1a6ZNm1ZjndjYWGJjY1m+fDmdOnUiODiY8PBwsrOzGTRoEO3bt+eJJ57gnXfe4fz587Vur2XLliQlJTF79mxmzpzJQw89xKxZswBo1aoVCQkJJCQk8PXXX9OpUycWLFiAm5tbjTLhcPHXJH9/f1UvFhERERG5SnfeeafTXLJnqa6roo/ILS7p7weMxHG5uhkctTpbXlX3Sj+gk2WVRuK4GrzYob3fbUbi+Db1MBLnxPnL32D8alVUmnvtTZ38xz81x0icJamxRuKYdLN+Q97mZubDds7g+7H8gplYVYZeswuGApnqD8DJsgtG4ri7mvlC+q/bnG88xNR3ravJL20nU1Fp5k3pbIdofHCbhu7CFfVNzGvoLlzWpmeDG7oL10XXyIqIiIiIiEijokRWREREREREGhXnmxMiIiIiIiJyk3C5ygrBUj8akRUREREREZFGRSOyIj8QZ/w1zlQRkgpDgZq6m/ttzdy+GSpAY6hDJmsPmar1Z6pI09Pj5hqJs/g15ysa5WxMFiCSH46p183ZXn9nKxoE5gq9mfrqN1l4zhmPt8i1UCIrIiIiIiJygzjhWMZNQVOLRUREREREpFFRIivY7XZsNhsdOnSgd+/ezJ07l/Lyf9/zsrCwEJvN1oA9vD5hYWHYbDbHY/LkyQ3dJRERERERuQ6aWiwAtG/fnrS0ND799FPi4+M5deoUr7zyCgDNmzenoKDgqmOGhIQwe/ZsunXrZrq79VZWVsbXX39NXl4ebm4X3+5NmjRpsP6IiIiIyK3FornFN4QSWQHAxcUFPz8/+vXrh4eHB+PHj+eFF17Ax8cHFxcXvL29G7qL1+Tzzz/HZrNxxx13NHRXRERERETEEE0tlksEBwdjsVjYvXs3cOWpxVu2bGHgwIE88MADREZGcujQIQDGjBmDzWbj8OHDjBgxApvNRmpqqqNdVlYWAwYMoHPnzkRFRVFcXAxcnOIcFRXFqlWr6N69O8HBwaxfv97RLi8vj7CwMAIDAxk7dixFRUWOZZs3byYsLIygoCAmT57smBr92WefUVRUxMMPP0xQUBAvv/xyjWnTIiIiIiLS+CiRlUu4ubnh4+PDiRMnal3vxRdfJCIigg0bNtC+fXsWLlwIQGJiIgUFBQQEBJCSkkJBQQGjRo0C4OTJk0yYMIHo6GiysrLw8fEhKSnJEXPv3r1s2LCBFStWMGTIEBISEoCLyXR0dDSjR49m3bp1eHt7M336dAAOHTpETEwMI0eOxG638/nnn7N06VIADh48yEMPPcSqVatIS0vj73//O2+++abZAyYiIiIicgUuFud8NHaaWiyXZbFY6rzHpIeHB+Xl5VitVuLj46n6v/ttenp6AhenK3t6etaYluzl5cVHH32El5cXO3fupKKiggMHDjiWl5aWMmfOHPz8/Bg2bBjLli0DIDMzk6CgIIYOHQpAbGysY8Q4MzOTe++9l4iICAAiIyNZvXo1MTExTJs2rUafY2JieOuttxg3bty1HxwREREREWlQSmTlEpWVlZSUlODr61vregsWLGDRokWkpqZis9mYNGkSnTp1qrVNdXU18+fPZ+PGjbRr1w6r1epIgAHatm2Ln58fAO7u7o6/FxUV0aJFC8dzf39//P39ASguLmbXrl0EBQU5+v9dMv2fmjVr5pjKLCIiIiIijZOmFssl8vPzsVgsdOzY8YrrlJaWUlZWRlpaGlu3bnVcm/p9lxvVzczMJD8/n5ycHFauXEmfPn1qLLdarZfdXkBAAIWFhY7n+/fvJzw8nKqqKvz9/QkJCSE9PZ309HQyMjJ44403ABg2bFiNxPWzzz6rkRCLiIiIiNxIFovFKR+NnRJZAaCqqorjx4+TnZ1NXFwcw4cPp1mzZrWuP27cODIyMigpKcHFxaXGyCpA69atyc3N5dixY+Tl5QEXE2CAU6dOkZOTQ3Jycp1TmAFCQ0PZvn07drudo0ePkpycjK+vLy4uLgwePJht27Zx8OBBAJYvX05cXBwA7dq1Y9q0aezcuZP33nuP5cuX88tf/vKajpGIiIiIiDgHJbICwJ49e+jZsyczZ84kMjKS2NjYWte3Wq3MmzePlJQU+vfvT3Z29iXXo8bGxpKbm0vfvn1ZvHgxAOHh4bRp04ZBgwaxZMkSnnjiCfbt28f58+dr3V7Lli1JSkoiLS2N0NBQTp8+zaxZswBo1aoVCQkJJCQkMHjwYPbs2cOCBQsAiIuLw8XFhaioKJKTk3nhhRcIDw+/toMkIiIiIiJOwVJdn+EwkVtY0t8PGInjZrA83LfnK43EqTL06f9X6QUjcZp5mPttrbVPUyNxfDzc616pHk6drzAS54LBU7ap039V3avUy9Pj5hqJs/i12n+IE/BwNfNZK68y9epD+QUzsUyd1y4YCmSqPwAnDJ1r3V3NfB/5epopteKM1VNdDE27NDV70+R/rVfdpP/pPz64TUN34YpCX8tv6C5c1vu/eaihu3BdNCIrIiIiIiIijYoSWREREREREWlUdPsdERERERGRG8SCE86fvwloRFZEREREREQaFY3IitTBVBEKU4VDwFzxCFO/ZJkq0nL4nJlCJgCtbvcwEqfSUFEMZyytYa5MjxmmijQ98xszRaPA+QpHmSrS4ozFXkwV1zF1zj5n6Lxmar9McsKX3xhTX7WG6qEZY/Iza+o96YznEbm1KJEVERERERG5QZyxMvfNwMl+bxIRERERERGpnRJZwW63Y7PZ6NChA71792bu3LmUl5c7lhcWFmKz2Rqwh9evurqayMhI3njjjYbuioiIiIiIXCclsgJA+/btyc3NZcqUKaxdu5b4+HjHsubNm1NQUHDVMUNCQti6davJbl6zlStX8u233xIVFdXQXRERERGRW4jFYnHKR2OnRFYAcHFxwc/Pj379+jFr1izS09M5efKkY5m3t3fDdvA6HD9+nAULFjBlyhTc3d0bujsiIiIiInKdlMjKJYKDg7FYLOzevRu48tTiLVu2MHDgQB544AEiIyM5dOgQAGPGjMFms3H48GFGjBiBzWYjNTXV0S4rK4sBAwbQuXNnoqKiKC4uBi5OcY6KimLVqlV0796d4OBg1q9f72iXl5dHWFgYgYGBjB07lqKiIseyzZs3ExYWRlBQEJMnT64xNXr27NkEBARQVFTEp59+avRYiYiIiIjID0+JrFzCzc0NHx8fTpw4Uet6L774IhEREWzYsIH27duzcOFCABITEykoKCAgIICUlBQKCgoYNWoUACdPnmTChAlER0eTlZWFj48PSUlJjph79+5lw4YNrFixgiFDhpCQkABcTKajo6MZPXo069atw9vbm+nTpwNw6NAhYmJiGDlyJHa7nc8//5ylS5cC8Omnn5KZmUnz5s05fPgwsbGxvPLKK4aPmIiIiIjI5Vkszvlo7HT7Hbksi8VCdR33B/Pw8KC8vByr1Up8fDxVVRfvuefp6QlcnJLs6elZY1qyl5cXH330EV5eXuzcuZOKigoOHDjgWF5aWsqcOXPw8/Nj2LBhLFu2DIDMzEyCgoIYOnQoALGxsY4R48zMTO69914iIiIAiIyMZPXq1cTExPDuu+/SuXNnkpOTsVgs/OIXv6BPnz48+eST/L//9//MHCwREREREflBKZGVS1RWVlJSUoKvr2+t6y1YsIBFixaRmpqKzWZj0qRJdOrU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AAOcOnWKnJwckpOT61W6OzQ0lO3bt2O32zl69CjJycn4+vri4uLC4MGD2bZtGwcPHgRg+fLlxMXF1Wi/aNEiRo8ezZ133nlVx0VERERE5FZ3//33849//MPxvLCwkPLy8jpHY3fs2MGsWbNYsGCBY9alKUpkBbh4X6iePXsyc+ZMIiMjHaObV2K1Wpk3bx4pKSn079+f7Oxspk2bVmOd2NhYcnNz6du3r2P+fXh4OG3atGHQoEEsWbKEJ554gn379nH+/Plat9eyZUuSkpJIS0sjNDSU06dPM2vWLABatWpFQkICCQkJDB48mD179rBgwQJH2/z8fL744gvGjh17DUdGREREROTaNXR1YhNVi7t27cq3337rGFVNTU2le/fuuLq6cubMGSoqKi5pc/z4ccaPH89TTz3Ffffdx9mzZzl79qyBI3qRpbo+w2Eit7Ckvx8wEsfF4OUR5y6Y+dia6tPnRaVG4ng3NXe1Q0d/TyNxPN3M3K6p9EKlkTiVBk/ZN+vZv+pm3THgt+PNFMlIef1FI3HKK6vqXqmeKqtMndfMnNjOG9o3g4eI0+fMnEdMXa73Iy/nu0LN0NsId1fnuqbR5GntZj1Hjg9u09BduKIY+66G7sJlJQ2996rW/+CDD3j++efx8vKisrKSt956i5/85CeEhIQwadIk+vXrV2P9N998k9mzZ18S55///Od19fs7zncGEhEREREREafSr18/srKy+Oyzz3jwwQe54447APjwww8vu/6oUaMct+C8EZTIioiIiIiI3CAWJ61afC3uvPNOp6k5o2tkRUREREREpFFRIisiIiIiIiKNiqYWi9TBVE2ESoO1FQ6fKjcSx1RRjOV/zDETyKCVs4YaidPGx8tInK9PmSmIVWaoaBTABUNvblM1A029H00WMnG2kiimijSNf2qOkThvvBFX90r19M1ZM+c1N0M/0f/r7AUjcUwV5wPI//JfRuK4Gqr0F/qAmemF7garIZoqiNfU3cwbydSIkcn/hrAYilVhqFPlJnfOSWnk8MbQcRUREREREZFGRYmsiIiIiIiINCqaWiwiIiIiInKD3ExVi52JRmRvEXa7HZvNRocOHejduzdz586lvPzf1yMVFhZis9kasIfX75NPPmHAgAGX/H39+vX06dOHHj16kJmZ2QA9ExERERERk5TI3kLat29Pbm4uU6ZMYe3a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zpSbOYd4ups5XwP8l0cTI3HOV5rZt5LzFUbimFRZZej7qNJMHFPvRxeDOYepBMbZ8qCnurVu6C5c0dT1exu6C5c142c/aeguXBcVe5KrduTIER577LHLLuvevTuvvvrqD9wjERERERG5lSiRlav24x//mPT09Msua9rUzKjTf3r22WdvSFwRERERkRvJ2UavbxZKZOWqfXf9rIiIiIiISENQsScRERERERFpVDQiK1IH76ZmCnV8evSskTgAR0rKjMT5kbeZqeCtfMwUIDFVpAPA5udlJM5dPmYKUJ0su2AkjruruflJpop9mSxCYoLJSoymiis5m2/OlhuJY6pAE8DYsWaK+TW5p5uROMkv9DESZ82OY0biAPRpf4eROE3dzYxjfHveTNEok5+zZh5mvrNva2LmGJn6XnPGU5GroZP/sW+dr2iYac72PXmz0IisiIiIiIiINCpKZEVERERERKRR0dRiERERERGRG8TkJS/ybxqRvcmcPn2a3/72t3Tu3JkhQ4bw2WefNXSXREREREREjFIie5OJi4ujtLSU9PR0IiIiiI6O5ty5cw3dLREREREREWOUyN5Evv76azZt2sSsWbNo06YNw4cPx93dnY8//rihuyYiIiIickuyWJzz0dgpkb2J/O///i+tWrXixz/+seNvTz75JFarlT179vDLX/6SLl268NRTT1FUVATA1q1bCQkJqRHHZrNRWFiI3W53jOp26dKFMWPGcOzYv28jUFfMTZs20adPH7p27cry5cvr7P+1bq+2drXtn4iIiIiINE5KZG8ixcXF+Pr61vjbU089RYcOHfj1r3/NI488wnvvvUdAQAAxMTFUVdV9f8zPPvuMwMBA0tPTadKkCS+//DIAZ8+erTVmSUkJr7/+Oq+99hrPPvssc+fOrdcU52vd3pXaiYiIiIjIzUeJ7E3kwoULuLpeeiPw7OxsvLy8eOaZZ2jRogVTpkzhwIED7Nixo86Y/v7+PPXUU7Rq1Ypnn32WnJwcLly4UGfM0tJSpk2bRvv27YmMjKSiooJ//etfN2x7V2onIiIiItKQXCzO+WjslMjeRLy9vTl9+nSNv0VGRnLgwAFatmzp+FuTJk348Y9/zNGjRy+JUVZWVuO5v78/lv+bRH/nnXdSWVnJyZMnOXr0aK0xb7/9du655x7HMoDq6uo69+Fat3eldnXtn4iI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QQEBAQGkpKRQUFDAqFGj6rXfZ86cISYmhqVLlzJ06FDatWtHbm5urX255557iIiI4NVXX2Xv3r188MEHxMbG1rmtL774gunTp/PSSy+xbNky1q1bV68+nj17lkmTJvH888/z/vvv4+bmxhtvvAHA6tWrKSgoAC4muwUFBTz66KMA/POf/2TGjBnMnj2bdevWceLECVasWOGIm5OTw6FDh1izZg0PPvggf/jDHwD45JNPmDp1KhMnTiQjI4Pjx4/z6quvArBt2zamTJnCpEmT+NOf/kRGRka9pkL/8pe/xN3dnfT0dP785z9jtVoZNmxYvfZfREREREScU4NPLR48eDD33HMPAI8//jgnT54kOTmZO+64g6effhqLxcKoUaMuSdhKS0t56623cHd3d/wtMzOToKAghg4dCkBsbCy7d++u0WbOnDn4+fkxbNgwli1bBoCXlxcfffQRXl5e7Ny5k4qKCg4cOFBnO09PTwBcXFzw9PTE29u73vsdHh6Oh4cHfn5+9O/fn02bNnHhwoU6+/K73/2OgQMHsnfvXqKjo+t1H6cPPviARx55hH79+gEXR5KXLl1aZztXV1fc3NwoLy/H19eX5ORkxyjo96chW63WGvvepk0btmzZgru7Ozt27KC6urrGPri6ujJjxgw8PDwYMmQIL730EnBx9Puxxx5zjAzHx8dz7NjF+wquWbOG/v3707t3bwAee+wxPvzwQ37+85/XuQ8vvfQSEyZM4MKFCyxZsgQXlwb//UZEREREbhEWlS2+IRo8kfXw8Ljk325ubpw4cYKuXbsCUFVVxdmzZzl//rxjncjIyBpJLEBRUREtWrRwPPf398ff39/xvG3btvj5+QHUaFtdXc38+fPZuHEj7dq1w2q1UlVVVWc7E/v9/f2vT1+aNWvGwIEDWbFiBW+++Wa9tnXs2LEax6FVq1b1ate0aVMWLVpESkoK06dP58EHH+Sll16q84bG586dY8qUKRQUFNChQwdcXV1r7EPnzp0d+/3941lUVOR4zQHuvvtu7r77bgCKi4vZunUrQUFBAFRUVDimNtclMDAQb29v3Nzc6NSpU73aiIiIiIiI83LKoanKyko6duxIeno66enpZGRkkJ6ejpvbv/Pu22677ZJ2AQEBNSro7t+/n/DwcEcSdaViRpmZmeTn55OTk8PKlSvp06dPjeV1FUGyWCz1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lBQKCgoYNWpUvfb7zJkzxMTEsHTpUoYOHUq7du3Izc3l0KFDxMTEMHLkSOx2O59//jlLly4F4J///CczZsxg9uzZrFu3jhMnTrBixQpHzJycHA4dOsSaNWt48MEH+cMf/lBnPzZt2sQf//hHEhMTmTNnDmvXrq1X/7/66ivmz5/PH/7wB9asWcPBgwex2+0A/P3vfycjIwOAgoICCgoKuP/++wHIzs7mzTffZOnSpdjtdgoKCtiwYYMj7rvvvounpydr167F19eX1157DYD333+f119/nf/5n//hnXfeoaCggLffvnjPvIyMDFJTU1mwYAGJiYksXLiwXkn8M888w549e/j4449JTU3loYceokePHvXafxERERGR6+XipI/G7geZWjx48GDuueceAB5//HFOnjxJcnIyd9xxB08//TQWi4VRo0YRGxtbo11paSlvvfUW7u7ujr9lZmYSFBTE0KFDAYiNjWX37t012syZMwc/Pz+GDRvGsmXLAPDy8uKjjz7Cy8uLnTt3UlFRwYEDB+ps5+npCYCLiwuenp54e3vXe7/Dw8Px8PDAz8+P/v37s2nTJi5cuEBmZib33nsvERERAERGRrJ69WpiYmJo06YNW7Zswd3dnR07dlBdXV2jn66ursyYMQMPDw+GDBnCSy+9VGc/PvjgA8LCwujatSsAERER7Nixo852Hh4eAJSXlxMQEMCf//xnx7JmzZphtVoBLjkm3bp1Izs7m8rKSj799FNcXV3Zv3+/Y7m/vz8vvPACcPG9kZmZCcBf/vIXRo4cSVBQEADz5s1zjOSmp6fz+OOPO37Q6NOnDx9++KFj3Svx8vJi4sSJvPLKKxw7dow1a9bUud8iIiIiIuLcfpBE9ruE6Pv/dnNz48SJE47kqqqqirNnz3L+/HnHOpGRkTWSWICioiJatGjheO7v74+/v7/jedu2bfHz8wOo0ba6upr58+ezceNG2rVrh9Vqpaqqqs52Jvb7+/sPUFxczK5duxxJWGVlpSNhPnfuHFOmTKGgoIAOHTrg6upao5+dO3d2xKtvP48dO8bDDz/seN6qVat6JbItW7Zk5syZzJ8/n/3799OzZ09efvllfH19a21XUlLCxIkT2bNnD506daJp06Y19uGhhx5y/Pv7+1BUVETLli0dz++77z7Hv4uLi/nkk09YuXIlAOfPn6dfv3517gPAgAEDmDFjBt26daN58+b1aiMiIiIiIs6rwYo9VVZW0rFjRxYsWABcTDTPnDmDm9u/u3Tbbbdd0i4gIID8/HzH8/379/Pcc885prx+N0r4nzIzM8nPzycnJwcvLy/efvvtGtfPXqnddywWC9XV1fXfwVr4+/sTEhLiGIGuqqqirKwMgOXLl3PixAn+9re/0aRJE+bOncuJEyfq3c/L8fX15dixY47nR48erVe7oqIibDYbdrudU6dO8bvf/Y6kpCSmTp0KXBylhouv3fcrnyUmJuLr68vHH3+MxWLhd7/7XY24V9qHgIAACgsLHc/fe+89tm7dyiuvvIK/vz8REREMGDAAuDhKXN9Efvny5dx1111s3bqV3bt306FDh3q1ExERERG5XjdDhWBn1GDTo3v16sWRI0fYsWMHrq6u/PWvf2Xs2LF1JouhoaFs374du93O0aNHSU5OxtfX15FUXUlpaSkAp06dIicnh+Tk5KtKTFu3bk1ubi7Hjh0jLy+v3u0uZ/DgwWzbto2DBw8CFxOtuLi4Gv0sKSlh7dq1vPPOO9edQPft25e1a9fyv//7v/zjH/9g1apV9Wr35Zdf8tRTT7F9+3bKysqwWCw1RlZ/9KMf4enpyYcffsjhw4cdxZ5KS0upqqrim2++4a233mLjxo312oehQ4fyxz/+kW3btvHVV1+xbNky7rrrLuDiNO3333+fs2fPcu7cOV566aUa1w5fyZEjR1iyZAnTp09n/PjxTJ06tcY+iIiIiIhI49Ngiay3tzdJSUmkpaUxcOBANm7cSHJyco0R2ctp2bKlo11oaCinT59m1qxZdW4vPDycNm3aMGjQIJYsWcITTzzBvn37OH/+fL36GxsbS25uLn379mXx4sX1anMlrVq1IiEhgYSEBAYPHsyePXscI9MjRoygurqan/3sZ9jtdiIiImpcA3wtHn30UZ588kliYmJ48cUXHdWG69KjRw+eeOIJfve73zFgwACqq6sZP368Y7m7uzszZ85k2rRphIaG8sEHHwAQExPD/v37GThwIPn5+QwaNOiylZL/U2hoKE899RTPP/88w4cP56GHHuLXv/41AI899hgDBw7kN7/5DZGRkbRs2ZLf/va3dcacPn06YWFh3HPPPfzqV7+itLS0XgmwiIiIiIg4L0u1qfmyIjepBZv3NXQXLrFux7G6V6qHC5VmRqePHz9rJE6TJuaudpj6czNTyO/9cf0LvNXmw/1mXrMTpZVG4gCUG3r9Talywm8jF0OzwVycbFrZR7u/MRLn+ZC2RuIAHDxdaiROpaH/rMn+4kTdK9XDybPlda9UT3lpb5sJZL3DSJiZM0cZidPEzdzn41yFmdf/x1Yz9VLcDH32KwzOJiuvNHOMzl0w0ydT5/7f9/x/ZgLdAH/+9EhDd+GyhnVu3LVjGuwa2cbuyJEjPPbYY5dd1r17d1599dUfrC/btm2rMVL6fb/4xS8c05ZvRqmpqVe8r++sWbN49NFHf+AeiYiIiIjIjaZE9hr9+Mc/Jj09/bLLmjZt+oP25f77779iX7y8vH7QvvzQIiMjGTRo0GWX3XGHmV+cRURERETEuSiRvUZubm41bhXTkDw8PJymLz80b2/vq7q3r4iIiIjID0lVi28MJbIidSi/YObijWYerkbiADS7zcy1O+cqzFxv6eFh5lTSpIm5Y1RWaWbfTF1H2tTNTG29pu4mr2s106dqzHxGTF0nZbLyg6n/9jB1ra2pY+RqqEPnDX3OAJq6m3k/NnM3cz5ydTVzjO6+s5mROAB5hq5t5YyZ638rjV3Y7nz/kW+qhEy1oZOIyevs3Ux91V4wE8bc+0huNQ1WtVhERERERETkWmhEVkRERERE5AbRyOGNoeMqIiIiIiIijYpTJrJ2u52oqKiG7oZRl9unhtpPZ+qLiIiIiIjI1XLKRPZGCgkJYevWrQ3dDQAGDx5MSkpKQ3cDuLa+FBYWYrPZblCPREREREQaP4vF4pSPxk7XyDagJk2a0KRJk4buBuBcfREREREREalNvUdko6KiiIuLo1evXkycOJGpU6cSFBREdnY2O3bsYNiwYXTp0oVnnnmGb7/9tkY7u91OWloaffr0YdOmTY5leXl5hIWFERgYyNixYykqKqqxzVWrVtG9e3eCg4NZv3694+9ZWVkMGDCAzp07ExUVRXFxMfDv6bGXazdmzBhsNhuHDx9mxIgR2Gw2UlNT69zvkJAQXnrpJR555BHmzZtHdHQ0Dz/8MDt37gRg8+bNhIWFERQUxOTJkykvL3e0XbJkCQ8//DD9+/dn165dl8S+0nTed955h169ehEYGEhMTAxnzpwBIDExkYkTJ7J48WKCgoLo06cPvkJnAgAAquNJREFU27Ztq3Mfrqcvy5Yto0ePHjz44INMmDDBsX/3338/ffv2BcBms2Gz2fj0008d7V599VW6d+9OUFAQcXFxVP7fLRomTpzIwoULiY+PJzAwkEGDBvHVV1852r355pv07t2bbt268fLLL1NRUQFcLIO/dOlS+vTpQ48ePfjjH/9Yr/2eM2cOY8aMAeD06dN069aNLVu21KutiIiIiIg4p6uaWnzo0CGmTp3KmjVraN++Pb1792bTpk089dRT9OrVi7Vr11JWVkZCQkKNdu+++y4ff/wxM2bMIDAwELg4LTU6OprRo0ezbt06vL29mT59uqPN3r172bBhAytWrGDIkCGOmCdPnmTChAlER0eTlZWFj48PSUlJdbZLTEykoKCAgIAAUlJSKCgoYNSoUfXa7zNnzhATE8PSpUsZOnQo7dq1Izc3l0OHDhETE8PIkSOx2+18/vnnLF26FIBNmzbxxz/+kcTERObMmcPatWvrta1//vOfzJgxg9mzZ7Nu3TpOnDjBihUrHMtzcnI4dOgQa9as4cEHH+QPf/hDnTGvtS9fffUV8+fP5w9/+ANr1qzh4MGD2O12AP7+97+TkZEBQEFBAQUFBdx///0AZGdn8+abb7J06VLsdjsFBQVs2LDBEffdd9/F09OTtWvX4uvry2uvvQbA+++/z+uvv87//M//8M4771BQUMDbb78NQEZGBqmpqSxYsIDExEQWLlxYryT+mWeeYc+ePXz88cekpqby0EMP0aNHj3rtv4iIiIjI9bI46aOxu6qpxYMHD+aee+4B4PHHH+fkyZMkJydzxx138PTTT2OxWBg1ahSxsbE12pWWlvLWW2/h7u7u+FtmZiZBQUEMHToUgNjYWHbv3l2jzZw5c/Dz82PYsGEsW7YMAC8vLz766CO8vLzYuXMnFRUVHDhwoM52np6eALi4uODp6Ym3t3e99zs8PBwPDw/8/Pzo378/mzZt4sKFC2RmZnLvvfcSEREBQGRkJKtXryYmJoYPPviAsLAwunbtCkBERAQ7duyoc1tt2rRhy5YtuLu7s2PHDqqrq2vsn6urKzNmzMDDw4MhQ4bw0ksv1RnzWvvi4eEBQHl5OQEBAfz5z392LGvWrBlWqxXgkmPZrVs3srOzqays5NNPP8XV1ZX9+/c7lvv7+/PCCy8AF99TmZmZAPzlL39h5MiRBAUFATBv3jzHSG56ejqPP/6444eQPn368OGHHzrWvRIvLy8mTpzIK6+8wrFjx1izZk2d+y0iIiIiIs7tqhLZ7xKb7//bzc2NEydOOJKkqqoqzp49y/nz5x3rREZG1khiAYqKimjRooXjub+/P/7+/o7nbdu2xc/PD6BG2+rqaubPn8/GjRtp164dVquVqqqqOttdj+/24/v7D1BcXMyuXbscyVRlZaUjYT527BgPP/ywY91WrVrVK3k8d+4cU6ZMoaCggA4dOuDq6lpj/zp37uzoR33371r70rJlS2bOnMn8+fPZv38/PXv25OWXX8bX17fWdiUlJUycOJE9e/bQqVMnmjZtWmMfHnroIce/v78PRUVFtGzZ0vH8vvvuc/y7uLiYTz75hJUrVwJw/vx5+vXrV+c+AAwYMIAZM2bQrVs3mjdvXq82/5+9+w6L4trfAP4uuxR7QCOggJgmoCgiIMRCR0SxRIjlipoEG0oSNWpAUexgcokJCkaNRkxsiViwXKXEblQs4LUXEBAEdZXQ257fH1zmJ1FhFw6wbL6fPPtEZmfePTO7M3B2Zr6HEEIIIYQQorzqXeypoqICPXr0QFhYGIDKjmZ+fj4kkv+PbtGixSvL6evr48KFC8LPKSkpmDVrlnDpatXZvr87ePAgLly4gBMnTqBVq1b49ddfq90/+6blqohEIjDG5F/BGujp6cHJyUk4Ay2TyVBUVAQAaN++PXJycoR5s7Ky5MqMioqCVCrFmTNnoKGhgdWrV0MqlQrP17Z+r1PXtjx+/BjdunVDdHQ0cnNz8cUXXyAiIgJBQUEAKs9uA5Xv+cuVz8LDw9G+fXv8+eefEIlE+OKLL6rlvmkd9PX1kZGRIfx84MABnD9/HitWrICenh68vLwwaNAgAJVnieXtyEdFRcHIyAjnz5/HzZs3YWpqKtdyhBBCCCGE1JcKFAhWSvUefsfe3h6ZmZlITk6GWCzG4cOH4evrW2tncciQIbh06RKio6ORlZWFyMhItG/fXugcvUlhYSEAIDc3FydOnEBkZKRCHdMuXbrg1KlTyMnJwblz5+Re7nWGDh2KxMREPHz4EEBlhykgIAAA4OzsjJiYGFy+fBlJSUnYvXu3XJlV6/f8+XPExMRgx44d9e5417Ut9+7dw+TJk3Hp0iUUFRVBJBJVO7P69ttvo2XLlkhISMCjR4+EYk+FhYWQyWR48uQJfvnlF8TGxsq1Dh999BG2bt2KxMRE3L9/Hz/99BOMjIwAVF7efejQIRQUFKC4uBiLFi2qdu/wm2RmZmLdunVYunQppk2bhqCgoGrrQAghhBBCCGl+6n1Gtm3btoiIiMCyZcsQGBiI9957D5GRkdXOyL6OgYEBIiIisGrVKixfvhw2NjZYuXJlra83YsQI/PHHH/Dw8MAHH3yA0aNHY8eOHSgpKZGrvfPmzcO8efMQFRWFnj17ws7OTq7lXsfQ0BAhISEICQlBeno6evbsKZyZdnNzw+3bt+Hn54e33noLzs7OQoe3JhMmTMDly5fh7u4OCwsLeHl51Xvc27q2pX///hg9ejS++OIL5OXloXfv3pg2bZrwvLq6OpYvX47g4GDk5eVh/PjxsLCwgJ+fH+bOnYvBgwejX79+8PDweG2l5L8bMmQInjx5gjlz5qCkpASenp749NNPAQDDhg1DTk4Opk6divz8fLi4uODzzz+vNXPp0qXw9PSEiYkJ3n33Xfz222/Yvn07xo8fX+uyhBBCCCGEEOUkYryusyVERYUk3K99Jjm00RRzyQGA+FvPuOQUl1Vwycl5WsAlR0OD3zbyd32XS455x3ZcchIzpbXPJAdpUTmXHAAoLuNz+GfgkyPj9NuI5281XpeDqXHK4bWNTt56yiVn+oAuXHIA4EVpGZecNur1/o4eALD76uPaZ5JDuxb8xmj/da18V1TVKp/P8WhJ2CwuOS006n2BoIDXce3tVnw+R5JarjSUl4zjga2cU1Z+CZ+/Icoq+LRnjv07XHIaQsy17KZuwmt5mus2dRPqhc9e2oxlZmZi2LBhr33uww8/xA8//NDILVJcYmJitTOlLxs1apRwubMq2rBhwxvHA165ciXc3NwauUWEEEIIIYSQhvaP78h27NgR+/bte+1zWlpajduYOjI3N3/jOrRq1apxG9PIxowZAw8Pj9c+p6Oj08itIYQQQgghhDSGf3xHViKRVBvypTnS1NRs9utQV23btlVoTGBCCCGEEEIaE1Utbhj8bkoghBBCCCGEEEIaARV7IqQWP5xO4ZKjIeb3ddxfxXwKLPCiIeHznRivgjgAIOEU1opTAarSCj7DPlXwqvbDkRI2iRuen0llUlzO503jWcQuj1PhmJbqyvUdfXE5vyHfeBXF4XUcWTz7Oy456NqbTw6AM2HeXHLKOW0jZTyESMR89pHh3/7BJae8lE8Rw8wfP+KS0xAO/lc5iz0N7UHFngghhBBCCCGEvIZIKb/SaP6U62tLQgghhBBCCCGkFtSR/Qc6f/48rKysmroZr/X1118jPDy8QV/Dx8cH0dHRDfoahBBCCCGEkIZDlxYTQgghhBBCSAOhqsUNg87IEkIIIYQQQghpVqgjSwAA+/fvh5OTEywsLODr64vnz5/XOP+TJ09gZmaG0tJSrFixAqNGjQIAjBo1CseOHQMA7Nu3D25ubujbty/CwsJQVSCbMYZNmzbB0dER/fv3x9atW1/7GhcvXoSdnR1u3boFACgrK8Pq1avRv39/ODk54fDhw8K8VT9PnDgRvXr1wmeffYaioiKhrb6+vujduzc+//xzlJWV1W9jEUIIIYQQQpoUdWQJCgoKEBgYiDlz5uDQoUOQSCTYvHlzjcu8/fbb0NHRQXp6OtLT09GmTRsAQFpaGkxNTZGYmIiFCxciMDAQ27Ztw/79+3HgwAEAlZ3mDRs2ICwsDOHh4VizZg0SExOr5d+/fx+zZs1CWFgYTExMAAAbNmzAsWPHsHnzZixcuBDz589Henq6sExoaChGjRqF3bt34+bNmzh06BAAYMmSJRCLxThw4AA++OADXLlyhdu2I4QQQgghpCZqECnlo7mjjiyBWCyGRCJBaWkp2rdvj8jISMyaNavW5czMzJCamoqysjLo6+vj5s2bEIlEMDQ0xN69e+Hq6goHBwd88MEHGDZsGBISEgBUnqn9+OOP0bt3b/Tu3RuOjo7CcwDw7NkzTJkyBQMGDICdnZ0wfd++ffjss8/wwQcfwMnJCWZmZjh58qTw/KBBgzBs2DB069YNdnZ2ePz4MSoqKvDHH3/A398fhoaG8PPzw9tvv81x6xFCCCGEEEIaG3VkCbS0tPD9999j165dsLOzg6+vb7UznW9iamqKW7duQUNDA126dMEff/wBU1NTAEB2djbi4uJgZWUFKysrREVFISsrS3hu27ZtwnOxsbHCcwCwc+dOuLi4ID4+Hjk5OcL07OxsrF69Wlju+vXr1Zbr27ev8G91dXUwxiCVSlFeXg59fX0AgJqaGjp37ly/DUYIIYQQQghpUlS1mOD58+do27Ytdu7cicLCQixevBirVq3C+vXra1zOzMwMP/74I6ytrdGlSxds3LhR6Ezq6elhzJgxmDhxIgCgvLwcMplMeM7LywuDBg0CAJSWlkJdXV3IHTJkCAICAlBWVoa1a9di6dKlwnJffPEFevXqBQAoKSlB69atheVe/ncVbW1tiMVi5OTkoH379mCMVev8EkIIIYQQ0pCoanHDoDOyBM+fP8ekSZNw8uRJ5OfnQ01NTeh01sTMzAzXr1+HsbExjI2Ncf36dZiZmQEARowYgfj4eDx9+hQVFRX47rvvsGbNGuG5Q4cOoaCgAMXFxVi0aBG2b98u5BobGwMApk6dipiYGDx48EBYLjo6GuXl5Xjx4gVmzpyJ2NjYGtsokUgwcOBArF27FhkZGdiwYQOys7PrsJUIIYQQQgghyoLOyBK88847mD9/PoKDg/H06VOYmJhgxYoVtS5naGiItm3bwtjYGF26dAEAoSNrZWUFf39/zJs3D0+ePIGdnR2WLVsGABg2bBhycnIwdepU5Ofnw8XFBZ9//vkr+bq6uvj4448RFhaGtWvXYvLkycjLy8O//vUvVFRUYOTIkRg7dmyt7VyyZAkCAgIwfPhw9O3bF+bm5opsHkIIIYQQQoiSEbGqMVEIIa/1w+kULjkaYn7XlfxVXMEtiwcNCZ+LO9Q4Xnoj4RTWSkPMJae0ovarHORRIVO+Q7YSNokbnp9JZVJczudNa6PJZ/8AgLwSPse1lurKdbFZcTmffR8Ayir4vG+8jiOLZ3/HJQdde/PJAXAmzJtLTjmnbaSMhxCJmM8+MvzbP7jklJeWc8nJ/PEjLjkN4djNJ03dhNdyM23eBVDpjCx5o8TEREybNu21z40aNQoBAQGN3CJCCCGEEEIIoY4sqYG5uTn27dv32udatWrVuI0hhBBCCCGEkP+hjix5I01NTRgYGDR1MwghhBBCCGm2REp5kXnzp1w3khBCCCGEEEIIIbWgM7KE1EKshIN/8aodwqlGEzjVjYCaEn5jyaseHq/iKjwLKylbISNla48qU1fCjS3jtK/llypX0Siev0I0JLzCOOXwKtKUcoVPDgAzg8+45KQ9LeSSk5NXwiXn3os8LjkAcDGjgEvO+x/wKRR053YOlxzyz0MdWUIIIYQQQghpIEr43aFKoEuLCSGEEEIIIYQ0K9SRJXXm6OiIP/74A/Hx8TAxMUFxcTGWL1+OBQsW1CkvOjoaPj4+3OclhBBCCCGEqBa6tJjUmb6+Pp48eYLCwkIwxpCeno4nT57g/fffb+qmEUIIIYQQohSoanHDoDOypM46deqEnJwcpKenQ11dHWlpacjJyUHnzp2bummEEEIIIYQQFUYdWVJnVR3ZtLQ02NnZCWdk9fX1kZycDG9vb/Tp0wczZ85EXt7/V9s7efIkPD09YWVlhQULFqC0tPSV7KdPn8LJyQl79uwRpq1btw62trZwdXXFjRs3qs2/Y8cO2Nvbo3fv3vDz80N+fj4AIDAwEEuXLhXmO3PmDAYMGACZjFPZX0IIIYQQQkijo44sqbOqS4vT09PRr18/oSPbpk0bTJ48Gfb29oiJiUFRURFCQkIAAGlpafDz88PEiRMRHR2N69evY9OmTdVyi4qKMHXqVHh7e2PUqFEAgPj4eGzduhXh4eEIDQ1FTEyMMP/t27exbNkyrFq1CkeOHIFUKsX27dsBAIMHD0ZsbKwwhEpcXBzc3d2hpkYffUIIIYQQ0vBEIuV8NHf01zyps06dOiE7Oxu5ubmwsLDA9evXUVJSgrt370JdXR0zZsxAp06dMGnSJCQkJAAADh48CDMzM3h5ecHIyAhjxowRngMAmUyG2bNn48WLF5g+fbowPS4uDp6enrC2toalpSW8vLyE54yNjXH69GmYm5vj/v37YIwhNTUVAGBnZ4eysjJcuXIFjDEkJCTAw8OjcTYQIYQQQgghpEFQsSdSZ506dcL169dhZmYGIyMjXLlyBW+//TZycnIglUphbW0NoLJzWlBQgJKSEmRnZ+PGjRuwsrICAFRUVKBly5ZC5qVLl+Dg4IAWLVogLi4OLi4uAICcnBzY2toK8xkaGiI5ORkAUFxcjIULF+LixYswNTWFWCwWLh2WSCRwdXVFbGwsJBIJ1NTUYGFh0RibhxBCCCGEENJAqCNL6qxTp04AKjuVOjo6aNWqFTp37gw9PT306NEDYWFhAADGGPLz8yGRSKCnpwcnJyfMmzcPQGUnt6ioSMg0MjLCmjVrcPz4cYSFhcHR0RFisRjt27dHTk6OMF9WVpbw76ioKEilUpw5cwYaGhpYvXo1pFKp8LyHhwcWLlwIdXV1uLu7Q6QK11IQQgghhJBmQZWrFt+5cwcBAQFIS0uDl5cX5s2bJ9ff2rt27UJ4eDieP3+Ovn37IiQkBB07dlTotenSYlJnrVq1Qrt27WBkZASgskOrr68PBwcHZGZmIjk5GWKxGIcPH4avry8YYxg6dCgSExPx8OFDAJWd0ICAACFTV1cXWlpaGDRoEDQ0NBAdHQ0AcHZ2RkxMDC5fvoykpCTs3r1bWKawsBAA8Pz5c8TExGDHjh3CPbEAYGNjg6KiImzfvp0uKyaEEEIIIYSD0tJSTJs2Dd27d8eePXtw//594W/3miQmJuL777/H6tWrER8fj5KSEoSGhir8+tSRJfXSqVMnoSNrZGQEfX19tG3bFhEREdiyZYtQbCkyMhISiQSGhoYICQlBSEgIhg4dijt37ghnbl8mEong7++P8PBwFBcXw83NDePGjYOfnx/mz58PZ2dnYd4JEyaAMQZ3d3dER0fDy8sLN2/eFJ4Xi8Vwc3ODtrY2zM3NG36jEEIIIYQQouJOnjyJ/Px8BAQEwMjICLNnz8bvv/9e63IpKSkIDg7Ghx9+CD09PXz00Uf473//q/Dri9jLp64IUTHFxcWQSqWIjIyEjo4OZs2apXDGujOpXNoi5vi1kbSwgkuOhFObWmjwCVLjeOkNryvIW6rzWbficj5DPsk4HrHVOG0jXm3i1R5SuwpOI5Bpcdo/ACC3uJxbFg+89v0ynjutkpn374TaZ5JHyhU+OQCeX1zLJSftaSGXnJy8Ei45917k1T6TnC5mFHDJuZXxgkvOnds5tc8kh/S1w7nkNISTd6S1z9QEbI1bvzIMpoaGBjQ0NORafu3atUhKSsLGjRsBVN5O2LdvX1y4cEGhdnz77be4c+cONmzYoNBydI8sUWm5ubkYPHgwjI2NsXnz5qZuDiGEEEIIIUrhxx9/xNq11b/8mTlzJvz9/atN8/Pze23nVCwWV7ttTyQSQU1NDbm5uWjXrp1cbXj+/Dl27dqFb775RuH2U0eWqDRdXV0kJSU1dTMIIYQQQghRKlOnTsUnn3xSbdrrzsYuXboUxcXFr0yPiop6pbCTpqYmiouL5e7ILlmyBL1794aDg4P8Df8f6sgSQgghhBBCSANR1qrF8l5G3KFDhzdOv3v3brVpBQUFUFdXl+v1f//9dyQmJmLfvn1yzf93VOyJEEIIIYQQQohCzM3Nq135mJGRgdLSUrnOxiYnJ2PlypUICwt7Y0e5NnRGlpBaaEj4fItWVsGv4EentvJ901UbTvVe8Fcxn+JTFeC3jVpxKkDF620Tc6pkpMaxbkw5pyI0ylakiWdtHQmnleO1rXmp4FTnsYLjerXRFHPJUef0npVy2vnFHPePglJeR20+zoR5c8kxM/iMSw4AaFvP5JKz79fFXHJ40W/VglvWKNNWXHKY6dtcctTcPuCSQxqftbU18vLysG/fPowYMQIbNmzAhx9+CLG48nien58PTU3NV87QPn36FNOmTcPkyZPRvXt3FBRUFiBr1UqxzyadkSWEEEIIIYSQBiISKeejviQSCZYtW4bFixfjww8/xNGjRzFnzhzh+WHDhuHEiROvLHfw4EE8e/YMa9asgaWlpfBQ+PXr1XpCCCGEEEIIIf9ILi4uOHbsGK5duwZLS0vo6OgIzyUkvH6IrkmTJmHSpEn1fm06I0saVXR0NHx8fLjPW5srV65g0KBBXLIIIYQQQgghlXR1deHi4lKtE9sY6IwsUXnXr1/HzJkzoamp2dRNIYQQQggh/zBKVkpCZdAZWaLSCgsLMXPmTIwdO7apm0IIIYQQQgjhhDqypEbu7u44d+4c4uLi0K1bNxQUFCA0NBTLly9HcnIyvL290adPH8ycORN5eXnCcidPnoSnpyesrKywYMEClJaWvpL99OlTODk5Yc+ePcK0devWwdbWFq6urrhx40a1+Xfs2AF7e3v07t0bfn5+yM/PBwAEBgZi6dKlwnxnzpzBgAEDIJPJIJFIsHPnTlhbW/PeNIQQQgghhJAmQh1ZUqPu3bsjNTUVDx48gKWlJVJSUvDw4UMYGBhg8uTJsLe3R0xMDIqKihASEgIASEtLg5+fHyZOnIjo6Ghcv34dmzZtqpZbVFSEqVOnwtvbG6NGjQIAxMfHY+vWrQgPD0doaChiYmKE+W/fvo1ly5Zh1apVOHLkCKRSKbZv3w4AGDx4MGJjY8H+N5xEXFwc3N3doaamBg0NDejq6jbGpiKEEEIIIeQVaiKRUj6aO+rIkhqZmpoiNTUVKSkpcHR0FDqy+fn5UFdXx4wZM9CpUydMmjRJqEx28OBBmJmZwcvLC0ZGRhgzZky1qmUymQyzZ8/GixcvMH36dGF6XFwcPD09YW1tDUtLS3h5eQnPGRsb4/Tp0zA3N8f9+/fBGENqaioAwM7ODmVlZbhy5QoYY0hISICHh0fjbCBCCCGEEEJIo6NiT6RGZmZm2Lp1K8rKyuDl5YWTJ08iOzsbGhoakEqlwiW7MpkMBQUFKCkpQXZ2Nm7cuAErKysAQEVFBVq2bClkXrp0CQ4ODmjRogXi4uLg4uICAMjJyYGtra0wn6GhIZKTkwEAxcXFWLhwIS5evAhTU1OIxWLIZJUDw0skEri6uiI2NhYSiQRqamqwsLBojM1DCCGEEEIIaQLUkSU1MjU1xf3792FgYICuXbtixYoVMDIygp6eHnr06IGwsDAAAGMM+fn5kEgk0NPTg5OTE+bNmwegspNbVFQkZBoZGWHNmjU4fvw4wsLC4OjoCLFYjPbt2yMnJ0eYLysrS/h3VFQUpFIpzpw5Aw0NDaxevRpSqVR43sPDAwsXLoS6ujrc3d0hUoHLJQghhBBCSPNHf5U2DLq0mNRIW1sb5eXl0NbWho6ODtLT09G9e3c4ODggMzMTycnJEIvFOHz4MHx9fcEYw9ChQ5GYmIiHDx8CqOyEBgQECJm6urrQ0tLCoEGDoKGhgejoaACAs7MzYmJicPnyZSQlJWH37t3CMoWFhQCA58+fIyYmBjt27BDuiQUAGxsbFBUVYfv27XRZMSGEEEIIISqOOrKkVqampjA2NgZQeTbVzMwMbdu2RUREBLZs2SIUW4qMjIREIoGhoSFCQkIQEhKCoUOH4s6dO8KZ25eJRCL4+/sjPDwcxcXFcHNzw7hx4+Dn54f58+fD2dlZmHfChAlgjMHd3R3R0dHw8vLCzZs3hefFYjHc3Nygra0Nc3PzBt8mhBBCCCGEkKYjYi+f1iKkGSouLoZUKkVkZCR0dHQwa9Ysrvkbzz/kklNWwW9Xa6nO5zsoGZcU4K/iCk5J/LTS4LONeFX1k3E61PI8YpfL+ISpKdk1U5xWCwAg4bRyvLY1L7zaoyXh9304rztC1Dm9Z6Wcjtk83/uCUl5HbT6cjTtwyTEzaMslBwC0rWdyydn362IuOcpIXY3PfsvA63cIn33WsVt7LjkN4c/7L5q6Ca9l++5bTd2EeqF7ZEmzl5ubi8GDB8PY2BibN29u6uYQQgghhBBCGhh1ZEmzp6uri6SkpKZuBiGEEEIIIaSRUEeWEEIIIYQQQhqIiOoWNwgq9kQIIYQQQgghpFmhM7KE1IJXcR1eRWMAfoUReLXoLS0xpyR+eBVqySvlU8iKV4EunkMkq4uV6xtiXvuamONXtMq2//N6/7U4fR6LOBYfasGpQJuy0eRYEKuVBp9jLa86n7wKWaU9LeSSA/Ar0jTiX0u45Oz5ZRGXHJ5EjM9+y+v4KBIpVzE80nxQR5YQQgghhBBCGgjPL6HJ/1PNrz8JIYQQQgghhKgs6sgSQgghhBBCCGlWqCNLGlV0dDR8fHy4z1uTtWvXwsbGBj169MCXX36J/Pz8emcSQgghhBAiD5GSPpo76sgSlXbgwAEcOHAAmzZtwqFDh3Dr1i1s3LixqZtFCCGEEEIIqQcq9kRUWlZWFlatWoWePXsCADw8PJCUlNTErSKEEEIIIYTUB52RJTVyd3fHuXPnEBcXh27duqGgoAChoaFYvnw5kpOT4e3tjT59+mDmzJnIy8sTljt58iQ8PT1hZWWFBQsWoLS09JXsp0+fwsnJCXv27BGmrVu3Dra2tnB1dcWNGzeqzb9jxw7Y29ujd+/e8PPzEy4RDgwMxNKlS4X5zpw5gwEDBkAmk2Hq1Kno06eP8FxKSgqMjIy4bR9CCCGEEEJq1NTXEKvotcXUkSU16t69O1JTU/HgwQNYWloiJSUFDx8+hIGBASZPngx7e3vExMSgqKgIISEhAIC0tDT4+flh4sSJiI6OxvXr17Fp06ZquUVFRZg6dSq8vb0xatQoAEB8fDy2bt2K8PBwhIaGIiYmRpj/9u3bWLZsGVatWoUjR45AKpVi+/btAIDBgwcjNjZWGBcvLi4O7u7uUFOr/vF+8OABYmNjMWbMmAbbXoQQQgghhJCGRx1ZUiNTU1OkpqYiJSUFjo6OQkc2Pz8f6urqmDFjBjp16oRJkyYhISEBAHDw4EGYmZnBy8sLRkZGGDNmjPAcAMhkMsyePRsvXrzA9OnThelxcXHw9PSEtbU1LC0t4eXlJTxnbGyM06dPw9zcHPfv3wdjDKmpqQAAOzs7lJWV4cqVK2CMISEhAR4eHtXWo6KiAoGBgfD29ka3bt0acIsRQgghhBBCGhrdI0tqZGZmhq1bt6KsrAxeXl44efIksrOzoaGhAalUCmtrawCVndOCggKUlJQgOzsbN27cgJWVFYDKTmTLli2FzEuXLsHBwQEtWrRAXFwcXFxcAAA5OTmwtbUV5jM0NERycjIAoLi4GAsXLsTFixdhamoKsVgMmUwGAJBIJHB1dUVsbCwkEgnU1NRgYWFRbT3Wrl2LvLw8zJs3r8G2FSGEEEIIIX8nUoXreJUQdWRJjUxNTXH//n0YGBiga9euWLFiBYyMjKCnp4cePXogLCwMAMAYQ35+PiQSCfT09ODk5CR0GmUyGYqKioRMIyMjrFmzBsePH0dYWBgcHR0hFovRvn175OTkCPNlZWUJ/46KioJUKsWZM2egoaGB1atXQyqVCs97eHhg4cKFUFdXh7u7O0Si/z9gxMXFISoqCrt370aLFi0abFsRQgghhBBCGgddWkxqpK2tjfLycmhra0NHRwfp6eno3r07HBwckJmZieTkZIjFYhw+fBi+vr5gjGHo0KFITEzEw4cPAVR2QgMCAoRMXV1daGlpYdCgQdDQ0EB0dDQAwNnZGTExMbh8+TKSkpKwe/duYZnCwkIAwPPnzxETE4MdO3YI98QCgI2NDYqKirB9+/ZqlxXfu3cPX331FYKCgqCnp4eCgoJqnWpCCCGEEEJI80MdWVIrU1NTGBsbA6g8m2pmZoa2bdsiIiICW7ZsEYotRUZGQiKRwNDQECEhIQgJCcHQoUNx584d4czty0QiEfz9/REeHo7i4mK4ublh3Lhx8PPzw/z58+Hs7CzMO2HCBDDG4O7ujujoaHh5eeHmzZvC82KxGG5ubtDW1oa5ubkwfdeuXSgqKsL8+fNhaWkJS0tLDBkypOE2FiGEEEIIIS8RiZTz0dyJ2MuntQhphoqLiyGVShEZGQkdHR3MmjWLa/6GPx9yzeNBS8LnOyheO78yHkZKK/i0qbBMxiWnpTqf90wVfvG8Ca+PEc9tpGwfbV7rJlbjE1RUymf/AIAWGnz2EV7f0PM6hvDa1gAg4ZTF65ht1r4dl5y3WqpzyQGAFGkBl5wR/1rCJWfPL4u45PDE73PEJYbbcc3N9G0+QQ3gUupfTd2E1+pj3Lapm1AvdI8safZyc3MxePBgGBsbY/PmzU3dHEIIIYQQQkgDo44safZ0dXWRlJTU1M0ghBBCCCHkFSp8MVWTontkCSGEEEIIIYQ0K9SRJYQQQgghhBDSrNClxYTUQhmL66hxapRMySo18CwaxWvdONZp4ULZig8B/PYRZdzX+H2OlGvleH2LzXO1KmScPtxKttPy3EYSXsdaTjm8Vi0nr4RTEj+8ijSNGr+USw7PolEiTu8c41Qykld7lNo/YBWbAp2RJYQQQgghhBDSrFBHlvwjpKen4+rVqygpUb5vfQkhhBBCCCGKoY4saVTR0dHw8fHhPm9Nli9fjo8//hiBgYFwdnbGvXv36p1JCCGEEEKIPERK+l9zRx1ZotLOnTuHU6dOIS4uDocPH8bAgQOxcePGpm4WIYQQQgghpB6oI0tUWosWLbBs2TK0atUKAGBiYoLc3NwmbhUhhBBCCCGkPqgjS2rk7u6Oc+fOIS4uDt26dUNBQQFCQ0OxfPlyJCcnw9vbG3369MHMmTORl5cnLHfy5El4enrCysoKCxYsQGlp6SvZT58+hZOTE/bs2SNMW7duHWxtbeHq6oobN25Um3/Hjh2wt7dH79694efnh/z8fABAYGAgli79/6qAZ86cwYABAyCTyWBhYQEbGxsAwLNnz/D777/Dzc2N6zYihBBCCCHkTUQi5Xw0d9SRJTXq3r07UlNT8eDBA1haWiIlJQUPHz6EgYEBJk+eDHt7e8TExKCoqAghISEAgLS0NPj5+WHixImIjo7G9evXsWnTpmq5RUVFmDp1Kry9vTFq1CgAQHx8PLZu3Yrw8HCEhoYiJiZGmP/27dtYtmwZVq1ahSNHjkAqlWL79u0AgMGDByM2NlYYuiUuLg7u7u5QU/v/j/fu3bvh4OCAt99+Gx999FGDbjNCCCGEEEJIw6KOLKmRqakpUlNTkZKSAkdHR6Ejm5+fD3V1dcyYMQOdOnXCpEmTkJCQAAA4ePAgzMzM4OXlBSMjI4wZM0Z4DgBkMhlmz56NFy9eYPr06cL0uLg4eHp6wtraGpaWlvDy8hKeMzY2xunTp2Fubo779++DMYbU1FQAgJ2dHcrKynDlyhUwxpCQkAAPD49q6zFixAisW7cOKSkp2Lp1awNuMUIIIYQQQkhDkzR1A4hyMzMzw9atW1FWVgYvLy+cPHkS2dnZ0NDQgFQqhbW1NYDKzmlBQQFKSkqQnZ2NGzduwMrKCgBQUVGBli1bCpmXLl2Cg4MDWrRogbi4OLi4uAAAcnJyYGtrK8xnaGiI5ORkAEBxcTEWLlyIixcvwtTUFGKxGDKZDAAgkUjg6uqK2NhYSCQSqKmpwcLCotp6aGhoYODAgfj888+xZcsWTJw4scG2GSGEEEIIIVVU4CpepUQdWVIjU1NT3L9/HwYGBujatStWrFgBIyMj6OnpoUePHggLCwMAMMaQn58PiUQCPT09ODk5Yd68eQAqO7lFRUVCppGREdasWYPjx48jLCwMjo6OEIvFaN++PXJycoT5srKyhH9HRUVBKpXizJkz0NDQwOrVqyGVSoXnPTw8sHDhQqirq8Pd3R2i/134v3nzZnTo0AHDhg0DUNnpFYvFDbfBCCGEEEIIIQ2OLi0mNdLW1kZ5eTm0tbWho6OD9PR0dO/eHQ4ODsjMzERycjLEYjEOHz4MX19fMMYwdOhQJCYm4uHDhwAqO6EBAQFCpq6uLrS0tDBo0CBoaGggOjoaAODs7IyYmBhcvnwZSUlJ2L17t7BMYWEhAOD58+eIiYnBjh07hHtiAcDGxgZFRUXYvn17tcuKu3TpglWrVuHPP//EgwcPsHHjRri7uzfoNiOEEEIIIYQ0LDojS2plamoKY2NjAJVnU83MzNC2bVtERERg2bJlCAwMxHvvvYfIyEhIJBIYGhoiJCQEISEhSE9PR8+ePYUzty8TiUTw9/fHkiVL4OnpCTc3N9y+fRt+fn5466234OzsLHSGJ0yYgMuXL8Pd3R0WFhbw8vLC+fPnhSyxWAw3NzecOXMG5ubmwnRnZ2ekpKTgq6++Qnl5Oby9veHr69uwG4wQQgghhJAqdG1xgxCxl09rEdIMFRcXQyqVIjIyEjo6Opg1axbX/I3nH3LN46GFhM/l0TJOuz+vgwjPw1FxuYxLTmkFnzZpSVT3AhhVKOH/JhUyPu+/GqeNxGtbq6vxCSos47OfAYC6mE+bxJzWrZzTvi/htF4AoKnG5zjC60jbTbsNl5ySCn6fo4Kyci45FZx+H40av7T2meSw55dFXHIAQJ3T54jX3xC8jo+uph245DSEpPS82mdqAr0M+ezDTYXOyJJmLzc3F4MHD4axsTE2b97c1M0hhBBCCCGENDDqyJJmT1dXF0lJSU3dDEIIIYQQQl4homuLG4TqXutGCCGEEEIIIUQlUUeWEEIIIYQQQkizQpcWE1KLvJIKLjmtNfiNX5tbzKeYBa/iKjyLmSgbMaciFOWcigZJOBWyUUa8an3xKkAC8CtCwguvVeNUxwg8P4681q2olE/hIDG3r/r5baQyGZ91U7bP9b0X/Arh6LdqwS2LB15FmngVjQKA/dsXc8si8lGyXU5l0BlZQgghhBBCCCHNCnVkCSGEEEIIIYQ0K9SRJY0qOjoaPj4+3OeVx19//YV+/fohIyODWyYhhBBCCCE1ESnpo7mjjiz5x1i9ejWePn3a1M0ghBBCCCGE1BN1ZMk/wsWLF5GQkIC33nqrqZtCCCGEEEIIqSfqyJIaubu749y5c4iLi0O3bt1QUFCA0NBQLF++HMnJyfD29kafPn0wc+ZM5OX9f9XBkydPwtPTE1ZWVliwYAFKS0tfyX769CmcnJywZ88eYdq6detga2sLV1dX3Lhxo9r8O3bsgL29PXr37g0/Pz/k5+cDAAIDA7F06f9X8ztz5gwGDBgA2f+qO5aWlmLRokVYuHAhWrVqxXX7EEIIIYQQUqOmvoZYRa8tpo4sqVH37t2RmpqKBw8ewNLSEikpKXj48CEMDAwwefJk2NvbIyYmBkVFRQgJCQEApKWlwc/PDxMnTkR0dDSuX7+OTZs2VcstKirC1KlT4e3tjVGjRgEA4uPjsXXrVoSHhyM0NBQxMTHC/Ldv38ayZcuwatUqHDlyBFKpFNu3bwcADB48GLGxsWD/G7shLi4O7u7uUFOr/HivX78exsbG8PDwaPDtRQghhBBCCGl41JElNTI1NUVqaipSUlLg6OgodGTz8/Ohrq6OGTNmoFOnTpg0aRISEhIAAAcPHoSZmRm8vLxgZGSEMWPGCM8BgEwmw+zZs/HixQtMnz5dmB4XFwdPT09YW1vD0tISXl5ewnPGxsY4ffo0zM3Ncf/+fTDGkJqaCgCws7NDWVkZrly5AsYYEhIShE7r/fv3sXPnTgQHBzf8xiKEEEIIIYQ0CklTN4AoNzMzM2zduhVlZWXw8vLCyZMnkZ2dDQ0NDUilUlhbWwOo7JwWFBSgpKQE2dnZuHHjBqysrAAAFRUVaNmypZB56dIlODg4oEWLFoiLi4OLiwsAICcnB7a2tsJ8hoaGSE5OBgAUFxdj4cKFuHjxIkxNTSEWi4VLhyUSCVxdXREbGwuJRAI1NTVYWFiAMYagoCB8+eWX0NXVbZTtRQghhBBCyMtEqnAdrxKijiypkampKe7fvw8DAwN07doVK1asgJGREfT09NCjRw+EhYUBABhjyM/Ph0QigZ6eHpycnDBv3jwAlZ3coqIiIdPIyAhr1qzB8ePHERYWBkdHR4jFYrRv3x45OTnCfFlZWcK/o6KiIJVKcebMGWhoaGD16tWQSqXC8x4eHli4cCHU1dXh7u4OkUiER48e4dKlS7hz5w5Wr14NAMjPz8ewYcOwZMkSeHp6Nui2I4QQQgghhDQMurSY1EhbWxvl5eXQ1taGjo4O0tPT0b17dzg4OCAzMxPJyckQi8U4fPgwfH19wRjD0KFDkZiYiIcPHwKo7IQGBAQImbq6utDS0sKgQYOgoaGB6OhoAICzszNiYmJw+fJlJCUlYffu3cIyhYWFAIDnz58jJiYGO3bsEO6JBQAbGxsUFRVh+/btwmXFurq6iI+Px759+4RHx44dsWHDBjg5OTX4tiOEEEIIIYQ0DDojS2plamoKY2NjAJVnU83MzNC2bVtERERg2bJlCAwMxHvvvYfIyEhIJBIYGhoiJCQEISEhSE9PR8+ePYUzty8TiUTw9/cXzo66ubnh9u3b8PPzw1tvvQVnZ2ehMzxhwgRcvnwZ7u7usLCwgJeXF86fPy9kicViuLm54cyZMzA3NwdQecmxgYFBtdesOmNM1YsJIYQQQkhjENGVxQ1CxF4+rUVIM1RcXAypVIrIyEjo6Ohg1qxZXPPDTj7gktNaQ8wlBwDKKvjstupiPkdWCaccnkrLZVxyKvjEcPslJlFTvm3Na914/TaScfy1pqaif32IOX2OynjtIOC3rXkdH8WcrlnTkPC7+I1XEq9tbarTlkvO9We5XHIAQL9VCy45FUr25/Go8Utrn0lO+7cv5pLDaxPx+jy6mnbgktMQbmQWNHUTXsusU/M+sUNnZEmzl5ubi8GDB8PY2BibN29u6uYQQgghhBBCGhh1ZEmzp6uri6SkpKZuBiGEEEIIIa9QzWt7mh4VeyKEEEIIIYQQ0qxQR5YQQgghhBBCSLNClxYTUouOrTS45PxVUs4lB+BXXKdcplzFLHjiVcyGV8EXXgVoeL5nvOpGyTjV++HVHmUs0MSzABUPIiUr0sJTYRmfD2QbTT47P6/CcwC/7S3hVHtQwukAeTGDXyGcUaZ8iteIGJ/3TcTpolJeBZoAYPi4JVxyDu3gk6OMxxHu/gGr2BTojCwhhBBCCCGEkGaFOrKEEEIIIYQQQpoV6siSRhUdHQ0fHx/u89bE09MT3bp1Ex4LFiyodyYhhBBCCCHyECnpf80d3SNLVFpRURHS09Nx7tw5SCSVH3cNDT73vBJCCCGEEEKaBnVkiUq7fv06unXrBh0dnaZuCiGEEEIIIYQTurSY1Mjd3R3nzp1DXFwcunXrhoKCAoSGhmL58uVITk6Gt7c3+vTpg5kzZyIvL09Y7uTJk/D09ISVlRUWLFiA0tLSV7KfPn0KJycn7NmzR5i2bt062NrawtXVFTdu3Kg2/44dO2Bvb4/evXvDz88P+fn5AIDAwEAsXbpUmO/MmTMYMGAAZDIZrl27hsePH8PW1hZWVlZYvHjxa9tCCCGEEEJIQxCJlPPR3FFHltSoe/fuSE1NxYMHD2BpaYmUlBQ8fPgQBgYGmDx5Muzt7RETE4OioiKEhIQAANLS0uDn54eJEyciOjoa169fx6ZNm6rlFhUVYerUqfD29saoUaMAAPHx8di6dSvCw8MRGhqKmJgYYf7bt29j2bJlWLVqFY4cOQKpVIrt27cDAAYPHozY2Fiw/w1vERcXB3d3d6ipqeHhw4ewsbHB7t27sWXLFpw9exY///xzI2w5QgghhBBCSEOhjiypkampKVJTU5GSkgJHR0ehI5ufnw91dXXMmDEDnTp1wqRJk5CQkAAAOHjwIMzMzODl5QUjIyOMGTNGeA4AZDIZZs+ejRcvXmD69OnC9Li4OHh6esLa2hqWlpbw8vISnjM2Nsbp06dhbm6O+/fvgzGG1NRUAICdnR3Kyspw5coVMMaQkJAADw8PAEBwcDC++eYbGBkZwdzcHH5+fjh69GgjbDlCCCGEEEJIQ6F7ZEmNzMzMsHXrVpSVlcHLywsnT55EdnY2NDQ0IJVKYW1tDaCyc1pQUICSkhJkZ2fjxo0bsLKyAgBUVFSgZcuWQualS5fg4OCAFi1aIC4uDi4uLgCAnJwc2NraCvMZGhoiOTkZAFBcXIyFCxfi4sWLMDU1hVgshkxWOVi5RCKBq6srYmNjIZFIoKamBgsLi9euT5s2bZCdnc19OxFCCCGEEPI6KnAVr1KijiypkampKe7fvw8DAwN07doVK1asgJGREfT09NCjRw+EhYUBABhjyM/Ph0QigZ6eHpycnDBv3jwAlZ3coqIiIdPIyAhr1qzB8ePHERYWBkdHR4jFYrRv3x45OTnCfFlZWcK/o6KiIJVKcebMGWhoaGD16tWQSqXC8x4eHli4cCHU1dXh7u4O0f8u/Pf29sbatWuhq6sLALh27Ro6d+7ccBuMEEIIIYQQ0uDo0mJSI21tbZSXl0NbWxs6OjpIT09H9+7d4eDggMzMTCQnJ0MsFuPw4cPw9fUFYwxDhw5FYmIiHj58CKCyExoQECBk6urqQktLC4MGDYKGhgaio6MBAM7OzoiJicHly5eRlJSE3bt3C8sUFhYCAJ4/f46YmBjs2LFDuCcWAGxsbFBUVITt27cLlxUDwHvvvYfg4GD897//xYEDBxAVFYWxY8c26DYjhBBCCCGENCzqyJJamZqawtjYGEDl2VQzMzO0bdsWERER2LJli1BsKTIyEhKJBIaGhggJCUFISAiGDh2KO3fuCGduXyYSieDv74/w8HAUFxfDzc0N48aNg5+fH+bPnw9nZ2dh3gkTJoAxBnd3d0RHR8PLyws3b94UnheLxXBzc4O2tjbMzc2F6QEBAVBTU4OPjw8iIyMxd+5cjBgxosG2FSGEEEIIIdWIlPTBwZ07dzBq1ChYW1sjNDS02okmeZSVlcHT0xPnz59X+LVFTNFXI0TJFBcXQyqVIjIyEjo6Opg1axbX/F8uZXDJ+auknEuOMpKoKd/dH8pWVr6sQvkOtbzeNhmnVePVHjVle/MByJTsV62Y08ZWstUCAOQWV3DJaaOpfN/18/psS8R8cnp31OaSs+kyn9+zADDKtCOXnHIm45Ij4tRbYOC3sw0ft4RLzqEdfHJ4fa4duulwyWkId7ILm7oJr/WBbsvaZ6pBaWkp3N3d0b9/f/j6+mL58uUYNGiQMCKJPCIjI7FmzRpERUWhb9++Cr2+8h2lCVFQbm4uBg8ejOTkZEyYMKGpm0MIIYQQQojKO3nyJPLz8xEQEAAjIyPMnj0bv//+u9zLp6amYvPmzXWuX0PFnkizp6uri6SkpKZuBiGEEEIIIa/gdWZe2dy6dQu9evVCixYtAADdunXD/fv35V5+0aJFmDx5Mk6dOlWn16eOLCGEEEIIIYT8w5SWlqK0tLTaNA0NDWhoaFSb5ufnhwsXLryyvFgsrlZkVSQSQU1NDbm5uWjXrl2Nr71nzx7k5+fj008/pY4sIYQQQgghhBD5/Pjjj1i7dm21aTNnzoS/v3+1aUuXLkVxcfEry0dFRQlDXlbR1NREcXFxjR1ZqVSKsLAwbNq0CRJJ3buj1JElpBb5pXyKNPEsiJRXwqeYCa8iPS3V+dxuz7NGD68iNK00+Kwbr/aU83rTOFK2Wl88CyspWyErXngVH1PnVDQI4FeAqn0rPn/alJbzKfbDUzGvNnGqPTj82z+45Lz/wdtccgCAmfLJ4nUY4VmkiRdeRZqGjF3MJefwTj7tUWZKWIMQADB16lR88skn1ab9/WwsAHTo0OG1y3fo0AF3796tNq2goADq6uo1vu6KFSvg5eUFU1NTBVtcHXVkCSGEEEIIIeQf5nWXESvC3Ny8WnGnjIwMlJaW1npZ8cGDB9GqVSv8+uuvAIDCwkJMmzYN06dPx5QpU+R+ferIEkIIIYQQQghRiLW1NfLy8rBv3z6MGDECGzZswIcffgixWAwAyM/Ph6am5itnaOPj46v9PHv2bEycOBEDBgxQ6PWpI0sIIYQQQgghDURJryyuN4lEgmXLlmHOnDlYvXo1Kioq8MsvvwjPDxs2DIGBgXBxcam2nIGBQbWfNTU10aFDB7Rt21ax16970wlRXHR0NPbu3Ytt27Zxnbc2jDGMHTsWbm5u+PTTT+udRwghhBBCyD+di4sLjh07hmvXrsHS0hI6OjrCcwkJCXJl1PVvferIkn+EnTt3Ii8vDz4+Pk3dFEIIIYQQQlSGrq4udHV1G/11qSNLVN7Tp08RFhaGH374odYqaoQQQgghhBDlx2dcCaKy3N3dce7cOcTFxaFbt24oKChAaGgoli9fjuTkZHh7e6NPnz6YOXMm8vLyhOVOnjwJT09PWFlZYcGCBa8MtgxUdjCdnJywZ88eYdq6detga2sLV1dX3Lhxo9r8O3bsgL29PXr37g0/Pz/k5+cDAAIDA7F06VJhvjNnzmDAgAGQySqHKVi1ahX09fXx+PFjXL16lefmIYQQQgghpGYiJX00c9SRJTXq3r07UlNT8eDBA1haWiIlJQUPHz6EgYEBJk+eDHt7e8TExKCoqAghISEAgLS0NPj5+WHixImIjo7G9evXsWnTpmq5RUVFmDp1Kry9vTFq1CgAlRXMtm7divDwcISGhiImJkaY//bt21i2bBlWrVqFI0eOQCqVYvv27QCAwYMHIzY2Fux/g77FxcXB3d0dampquHr1Kg4ePIhOnTrh0aNHmDdvHlasWNEYm44QQgghhBDSQKgjS2pkamqK1NRUpKSkwNHRUejI5ufnQ11dHTNmzECnTp0wadIk4YbugwcPwszMDF5eXjAyMsKYMWOq3ewtk8kwe/ZsvHjxAtOnTxemx8XFwdPTE9bW1rC0tISXl5fwnLGxMU6fPg1zc3Pcv38fjDGkpqYCAOzs7FBWVoYrV66AMYaEhAR4eHgAAHbt2gULCwtERkZi5syZ2Lp1K7Zt24aUlJRG2HqEEEIIIYSQhkD3yJIamZmZYevWrSgrK4OXlxdOnjyJ7OxsaGhoQCqVwtraGkBl57SgoAAlJSXIzs7GjRs3YGVlBQCoqKhAy5YthcxLly7BwcEBLVq0QFxcnFCSOycnB7a2tsJ8hoaGSE5OBgAUFxdj4cKFuHjxIkxNTSEWi4VLhyUSCVxdXREbGwuJRAI1NTVYWFgAALKzszFgwACIRJXXT+jr60NHRwcZGRno2rVrw248QgghhBDyjydShet4lRB1ZEmNTE1Ncf/+fRgYGKBr165YsWIFjIyMoKenhx49eiAsLAxA5fA2+fn5kEgk0NPTg5OTE+bNmwegspNbVFQkZBoZGWHNmjU4fvw4wsLC4OjoCLFYjPbt2yMnJ0eYLysrS/h3VFQUpFIpzpw5Aw0NDaxevRpSqVR43sPDAwsXLoS6ujrc3d2Fjquenh5KSkqE+QoKCpCbm4tOnTo1zAYjhBBCCCGENDi6tJjUSFtbG+Xl5dDW1oaOjg7S09PRvXt3ODg4IDMzE8nJyRCLxTh8+DB8fX3BGMPQoUORmJiIhw8fAqjshAYEBAiZurq60NLSwqBBg6ChoYHo6GgAgLOzM2JiYnD58mUkJSVh9+7dwjKFhYUAgOfPnyMmJgY7duwQ7okFABsbGxQVFWH79u3CZcUA4Onpid27d+PcuXN49OgRlixZgi5dutDZWEIIIYQQQpoxOiNLamVqagpjY2MAlWdTzczM0LZtW0RERGDZsmUIDAzEe++9h8jISEgkEhgaGiIkJAQhISFIT09Hz549hTO3LxOJRPD398eSJUvg6ekJNzc33L59G35+fnjrrbfg7OwsdIYnTJiAy5cvw93dHRYWFvDy8sL58+eFLLFYDDc3N5w5cwbm5ubCdDs7O3z99ddYsmQJMjMzYWJigvDwcKip0Xc4hBBCCCGk4YnoyuIGIWIvn9YipBkqLi6GVCpFZGQkdHR0MGvWLK7568+lcslR43gUyyup4JIj47T3t1Tn88UAzwM9ryNbKw0+61ZawadB5bzeNABq9Iu1Vrw2t7Jta17rpS7mt2JiJdtIpeWypm7CK3gdR3j5dtc1Ljnvf/A2lxwACHR9n0sOz2OtslHn9GX+kLGLueQc3rmES45jt/ZcchpCytPipm7Ca3XtoNXUTagXOiNLmr3c3FwMHjwYxsbG2Lx5c1M3hxBCCCGEENLAqCNLmj1dXV0kJSU1dTMIIYQQQgh5hXJdb6I66EZBQgghhBBCCCHNCnVkCSGEEEIIIYQ0K3RpMSG1KC7nU/BBi+Pexqsoijqna13KOBXF4FnrRUvC53s6XuVeeBWyUrJ6OCpPVbc3r6JBPIs95eSVcclppcln39cU88kp5lg0ilf9oQpOQeWl5Vxy7tzOqX0mOam5fcAlRyTis41ESnhRKa/ik7yKNHmM4VM0qujKWi45DUL5PgYqgc7IEkIIIYQQQghpVqgjSwghhBBCCCGkWaGOLGlU0dHR8PHx4T7vm3z99dfo1q3bK4+MjIx65RJCCCGEECIPkZL+19xRR5aotMWLF+PixYvCY+PGjTA2Noa+vn5TN40QQgghhBBSR1Tsiai0Fi1aoEWLFsLPP//8M/z9/SEWi5uwVYQQQgghhJD6oDOypEbu7u44d+4c4uLi0K1bNxQUFCA0NBTLly9HcnIyvL290adPH8ycORN5eXnCcidPnoSnpyesrKywYMEClJaWvpL99OlTODk5Yc+ePcK0devWwdbWFq6urrhx40a1+Xfs2AF7e3v07t0bfn5+yM/PBwAEBgZi6dKlwnxnzpzBgAEDIJNVrxSZnJyMR48ewcPDg8u2IYQQQgghpDYikXI+mjvqyJIade/eHampqXjw4AEsLS2RkpKChw8fwsDAAJMnT4a9vT1iYmJQVFSEkJAQAEBaWhr8/PwwceJEREdH4/r169i0aVO13KKiIkydOhXe3t4YNWoUACA+Ph5bt25FeHg4QkNDERMTI8x/+/ZtLFu2DKtWrcKRI0cglUqxfft2AMDgwYMRGxsLxipL5cfFxcHd3R1qatU/3r/88gvGjh37ynRCCCGEEEJI80J/0ZMamZqaIjU1FSkpKXB0dBQ6svn5+VBXV8eMGTPQqVMnTJo0CQkJCQCAgwcPwszMDF5eXjAyMsKYMWOE5wBAJpNh9uzZePHiBaZPny5Mj4uLg6enJ6ytrWFpaQkvLy/hOWNjY5w+fRrm5ua4f/8+GGNITU0FANjZ2aGsrAxXrlwBYwwJCQmvnHV98eIF4uPjMXLkyAbcWoQQQgghhJDGQPfIkhqZmZlh69atKCsrg5eXF06ePIns7GxoaGhAKpXC2toaQGXntKCgACUlJcjOzsaNGzdgZWUFAKioqEDLli2FzEuXLsHBwQEtWrRAXFwcXFxcAAA5OTmwtbUV5jM0NERycjIAoLi4GAsXLsTFixdhamoKsVgsXDoskUjg6uqK2NhYSCQSqKmpwcLCotp6xMbGwtraGu3atWuwbUUIIYQQQsjfqcBVvEqJOrKkRqamprh//z4MDAzQtWtXrFixAkZGRtDT00OPHj0QFhYGAGCMIT8/HxKJBHp6enBycsK8efMAVHZyi4qKhEwjIyOsWbMGx48fR1hYGBwdHSEWi9G+fXvk5OQI82VlZQn/joqKglQqxZkzZ6ChoYHVq1dDKpUKz3t4eGDhwoVQV1eHu7s7RH+78P/IkSN0bywhhBBCCCEqgi4tJjXS1tZGeXk5tLW1oaOjg/T0dHTv3h0ODg7IzMxEcnIyxGIxDh8+DF9fXzDGMHToUCQmJuLhw4cAKjuhAQEBQqauri60tLQwaNAgaGhoIDo6GgDg7OyMmJgYXL58GUlJSdi9e7ewTGFhIQDg+fPniImJwY4dO4R7YgHAxsYGRUVF2L59+ysd1uLiYly8eBF9+/ZtsO1ECCGEEEIIaTzUkSW1MjU1hbGxMYDKs6lmZmZo27YtIiIisGXLFqHYUmRkJCQSCQwNDRESEoKQkBAMHToUd+7cEc7cvkwkEsHf3x/h4eEoLi6Gm5sbxo0bBz8/P8yfPx/Ozs7CvBMmTABjDO7u7oiOjoaXlxdu3rwpPC8Wi+Hm5gZtbW2Ym5tXe50rV66gbdu2MDQ0bJgNRAghhBBCyBs0dXViVa1aLGIvn9YipBkqLi6GVCpFZGQkdHR0MGvWLK75a06lcMnRkvA7YhSX89lt1Tg1ScbpKMKrPQCgJeHzPZ1EzKdRFZw2Eq8c8s/G6xjSSoPf9+HPCsq55LTS5NMmTTGfnOJyWe0zyYnX7s/rOPLv7Ve55IjV+Y3tHuXfn0tOmYzP+yZSwrsj1TmN3sDA53PkMWYxl5yiK2u55DSEjOclTd2E1zLQ1mzqJtQL3SNLmr3c3FwMHjwYxsbG2Lx5c1M3hxBCCCGEENLAqCNLmj1dXV0kJSU1dTMIIYQQQgh5DeU7M68K6B5ZQgghhBBCCCHNCnVkCSGEEEIIIYQ0K1TsiRBCCCGEEEIayKMXpU3dhNfq/JZGUzehXuiMLCGEEEIIIYSQZoU6soQQQgghhBBCmhWqWkwIIYQQQgghDYRqFjcMOiNLCCGEEEIIIaRZoY4sIYQQQgghhJBmhS4tJoQQQgghhJAGIqJrixsEnZElhBBCCCGEENKsUEeWEEIIIYQQQkizQpcWE0IIIYQQQkgDEVHd4gZBZ2QJIYQQQgghhDQr1JElhBDSKA4dOoSioqKmbgYePnyIM2fOICUlRe5lMjMzwRhrwFYRQkj9KMsxFqDjLGkc1JElpI7Kysqwfv16eHt7Y8CAAbh79y68vLyQlpbWJDnKiOe6xcTEYNasWRgzZgxSU1PxxRdfQCqVNkCra5aamorvv/8eU6dOxYgRIzBo0CB4enris88+w88//4zS0tJGa0thYSHWrFkDX19fLFu2DPfu3av2fHFxMZydnWvNuX//PgICAuDn54d9+/YBALZt24aRI0di1KhR2LRpk9xtyszMfONj8eLFuHXrFjIzM2vNCQoKErZlWVkZNm3aJHyOxowZg5iYGLnb9LKVK1fC3d0d8+bNg6enJ4YOHYoHDx7UupyTkxM8PDxw+PDhOr1uldLSUqxduxZfffWVsK1DQ0NhbW2NPn36YO7cuXj+/LlcWRUVFfjhhx8wfPhwfPTRR/j3v/+NR48e1bltyvTZrlLT56mp/Pbbb69MKy4uxurVq5sk5+zZs6+d/uuvvzZJDk8DBw7EqlWrkJSU1GRtULbjLK9jLKC6x1mlJFLSRzMnYvTVByF1snDhQty4cQOjR49GaGgo9u/fj61bt+LevXv4+eefGz3n2LFjCAkJQVZWljCNMQaRSISbN28qsGb8snit23fffYf9+/dj2LBh2LZtG/bv349///vfkMlkCA8PV2TV6uXQoUP44YcfMH78eJibm6N169bQ1NREQUEBbt68iW3btkEkEmHnzp1QV1dv8PbMmjULt27dgoeHB1JSUhAbG4vRo0dj7ty50NTURGFhISwtLXHr1q03ZpSWlsLZ2RkDBw6EiYkJfv/9d3Ts2BEPHjzA559/DrFYjE2bNsHe3h6zZs2qtU39+/fHs2fP8NZbb6Fly5bVvl3PyspCx44dIZFIEB8fX2OOqakpLl68iNatWyM4OBhnz56Fn58f2rRpg+TkZPzyyy+YN28eRo8eXWPOzz//DB8fH4jFYiQlJWHevHnYunUr9PT0UFBQgCVLliAtLQ07d+6sMcfExAQbN27Ezz//jEePHmHs2LH46KOP0KZNm1q3ycuCgoJw8+ZNODs749ChQzAyMkJ5eTnmzJmDnJwcLF26FN26dcPatWtrzfrhhx8QExODTz75BGKxGPv370dycjJGjRoFf39/dOjQQe52Kdtnu4qJiQlEIpHwORK9NIaFose1qqzXUSTL3d0dbdq0QXBwMLp3744//vgDy5YtQ9euXfHTTz81ek7fvn3Rt29fBAYGQk9PD7du3UJQUBCKiopw8ODBRs/h6cyZM4iPj0dCQgLU1NQwePBgeHh4oHv37o3WBmU7zvI6xgKqe5xVRo//KmvqJryWXtvGO543CEYIqRMrKyuWlpYm/PvRo0csPT2dWVhYNEmOnZ0dW716NUtJSWEZGRnVHorilcVr3Wxtbdndu3er5aSmpjJLS8talx00aBBzcnKq9SGPAQMGsDt37rzx+YKCAmZtbc1OnjzZKG0yNzcXti9jjN2/f5+NHj2aDR06lKWkpLCCggJmYmJSY8bVq1fZkCFDhJ+fPn3KzM3N2alTp6rl2tnZ1doexhjLzc1lCxYsYB9++CE7fPhwteeq3jt5dOvWjeXl5QnL/fe//632/P79+5mHh0etOVXb4/z582zv3r1s7dq11Z7PyMhgvXr1qjXHxMREaE9SUhKbN28es7KyYtOmTWN79uyRe9+wsbERPkPp6enMxMSEZWdnC8/v3LlTrvYwxlj//v3ZjRs3hJ/Ly8uZq6srGzlyJLOwsGDh4eGssLBQrixen+2XHT16lDk6OjITExPh0a1bt1o/k29SVFTELly4wCZMmMD+/PNPhZd/+Th27949tnfvXubp6ckSEhIUyikvL2fbt29nAwcOZF5eXszZ2ZkdO3ZM4fbwysnNzWXffPMNs7W1ZV988QXr27cv27JlCysrK2uSnL1798r1UFRSUhILCwtj1tbWzM3Nja1Zs4Y9e/bsjfOr6nGW1zGWMdU9ziqjrNxSpXw0d1S1mJA60tPTQ2JiIgwNDYVpaWlpMDAwaJIckUiE0aNHw8jISKHlGjKL17q1bdsWmZmZeO+994RpL168kOuM06pVq+Dv749x48bByspKodf9O4lEguTkZLz//vuvfT4rKwtFRUXQ1dVtlDa1aNECubm5wvZ95513sH37doSHh8Pb2xtBQUG1Zujo6OD58+coLi6GlpYW2rdvj6CgIPTt21eY58mTJ1BTk+9OlLZt22L58uW4ePEiFi9ejEOHDiE4OFihs4NVysvLAVRu93bt2lV77t133612xcCb7Ny5Ezt27MDMmTPRqVMndOrUqdrzaWlp0NfXV6hdPXv2RM+ePZGbm4tjx44J69i2bVucPn261uWrzi5oaWm9cj+YhoYGWrVqJVc71NXVoaWlJfwsFothZGSEr7/+GkVFRfjhhx/g5uaGU6dO1ZrF67P9suDgYIwcORLe3t5czuJqaWnB2toakZGRGD9+PKKjoxVavnPnztV+fvfdd9G/f3/4+fnB0dFR7hw1NTVoampCLBajrKwMEomk2vvQ2Dlt27bFgAEDcOLECZw/fx7Gxsb48MMPIZEo9icer5w9e/YI/y4rK8PVq1fRoUMHGBgYICsrCzk5OTA3N8eIESPkzrx69SqOHTuGY8eOQV1dHR9++CGePXsGX1/fN34OVPU4y/MYC6jucVbZqMBVvMqpqXvShDRXJ06cYD169GCjR49m3bt3Z59//jnr169ftW9YGzNn9+7dzNfXt8ZvqBs7i9e67d27l/Xo0YPNnj2b9ezZk61cuZI5OzvL/a3+f//7X+bo6FjtzFddHDlyhPXo0YP5+vqyTZs2sf/85z8sISGB/f7772zhwoXM0tKShYWFNVqbwsPDmZubG7t8+fIrz8XGxjILCwu5zn4tW7aMubu7s4sXL77y3IEDB5idnR376aefFG5fSUkJ+/7771m/fv3Y7t27mbW1tdxnC4YOHcosLCzY6NGjmb29PZs3b57wXE5ODps+fTqbMWOG3G158uQJmz17NuvWrRsbPXo0W7duHQsLC2O2trZyfY5ePnPxOsXFxezs2bO15qxcuZJNnDiRbd++nX388cfM09OTjR8/nv3xxx/st99+Y66urtXWtSYhISHCGcWbN2+yH374gdnb27OKigphngsXLsiVxfOzXeXDDz9kDx8+VGgZeaSlpbF+/fpxycrNzWUDBw5UaJmhQ4eykSNHsqtXrzLGGPvPf/7DBg4cyKZOndokOZ999hkbOHAgO3ToECsvL2c//fQT69OnD1u6dGmT5LzM39+fhYeHM5lMJkxbv3693Pvu0qVL2cCBA5mdnR0LCgpiZ8+eFT7fjx49qvUsn6ofZ+tzjGVMdY+zyuhxbqlSPpo7ukeWkHpIS0vDoUOHkJ2dDT09PQwZMqTa2cfGzPHx8cG9e/dQVFSEd955B61btxaei4qKarIsXtsoMTER+/btE3KGDx+u0LfsRUVFkEgk9T4zdOfOHfz++++4desW8vPzhW+xzc3N4ebmBhMTk0Zt04EDB/D48WNMmTLllefu3buH3bt3IzAwsNacP//8Ey1btkTPnj2rTd+yZQu6dOkCJyenOrfx/v37CAoKwuXLl5GQkPDKt/VvUlxcjOvXr+PatWt4+PAhFi9eDAD4+OOP8d577yEgIEDhe6euXr2KXbt2IScnB3p6ehg6dCjs7OxqXS4gIADBwcHQ1NRU6PVeZ9++fbh27Rref/99eHl5YcuWLTh8+DDKy8thaWmJ2bNnv3Jm5HXKy8sRHh6OAwcO4Pnz5zA1NUVQUBDMzMzq1C6en22gspjRsWPHEBoaCh0dnTq1ycnJqdp9rTKZDE+ePMGECRMwb948hbJ8fHxeybp79y4GDBiAb7/9Vu6cX3/9FWPHjq129iw/Px/fffedXGfneOeEhobC398fLVu2FKZlZmZi6dKlWL9+faPnvMzS0hIHDhyodhXOo0ePMGLECFy8eLHW5RcsWIDBgwfDzs4OYrG42nMlJSV48eJFrVcJ/BOOs/fv38eiRYtw6dIlhY6xQM3H2ffffx9ff/11nY6zu3fvFn5fN8VxVtlkK+k9srrN/B5Z6sgSoiL27t37xudGjhzZZFnK5tatW3jvvfcUvlyO1F9mZib09PTkvkyZNG88vhC7cOFCtZ9FIhH09PTq9GXY349rIpEIurq6sLW1fWMRqLqIiorCRx99VG19mzInLi4O/fv3r9Nly/XN8fX1hUQiwRdffAFdXV3k5ORg3bp1KCwsVKigFZFPZmYmdHV1X+n0k6aXk6ecHdmObagjS8g/0saNGzFp0qRq3/KeO3cOERER2LZtm9w5BQUF+P777xEfH49nz57h7bffhpubG2bMmFHtm/G6Ki0thYaGRr1z6pKVnZ2NZcuWwdvbG/b29hg5ciQ6dOiAlStX4u2335Y7p6KiAr/88ssr22j06NEK/8K2sbHBvn37FPrG+nXKysrw008/ISEhAVlZWdi8eTMCAgIQFham0L3FVTnx8fF4/Pgx95zvvvtOoT/6ebWnMdatrjnK9p7Vtz0828QTzy/EZDIZXrx4AW1tba6dzobA6xijCjlPnz5FcHAwjh8/jvLycojFYgwYMABLliyR637rwsJCbN++HampqaioqBCm37x5UxjCRh4DBw4UKh736tVL7uX+KTlVWR4eHhg8eDCXNg0ZMuSVM891yeGxbsqAOrINg74WJ6SOwsLCUFJSUm3ae++9h+TkZIVyFi1ahKSkJAQEBCAqKgpz5szBhQsXsGjRIoVycnJysGTJEnzyySeYMGECJkyYAB8fnzpdqsQrKygoCJqamsIliWFhYdDR0REuXZLXihUr8Ouvv8LJyQkzZ87EwIEDsXnzZoSEhCiUA4DbYOtLlizB0aNHMWrUKBQUFEBLSwsWFhYKv29LlizBsWPH4OXl1SA5ilyiyLM9PLN45yjbe1bf9lRlHT16lMv7xsvIkSMxcuRIDBw4EO+//77wZZYindinT59ixowZ6NmzJ/r16wdzc3N8+eWXePbsmcLtKSgowMqVK+Hs7AwLCwu4urrim2++QWFhocJZNeF1jFGFnA4dOmDt2rVITk7G6dOnkZycjPXr18tdNGzevHmIi4vDvXv3kJ6eDh0dHRw9erRakSR5rFq1CmVlZfjiiy/g5OSEb775BtevX1d4fVQ1pyqrtLSUW5s+//xzpVk3orrojCwhCqq6r8fHxwc//vijcNaUMYZTp07h5MmT2L9/v9x5VlZWiI6OrnbWJDU1Fd7e3nLdQ1Rl4sSJaNeuHUpLSyGTyeDg4ICIiAiMGTMGM2fOlDuHZ5alpSWOHDlS7Y+Wx48fY+jQoUhMTJQ7p2/fvti2bRs++OADYdqtW7cwceJEnD9/Xu4cALC2tsb+/fvrfXbC2toa0dHRMDQ0FDJlMhk8PT1x5cqVf3yOMrZJVXN4ZLm7u6OsrPYzBvKMTVklPz8f8+fPR3x8PDQ0NFBWVgZXV1esXLlS7stlJ0+eDHV1dfj7+0NXVxePHj1CREQEKioqsGHDBrnbAgBz5sxBRkYGJk+ejI4dOyIzMxM//fQTunTpotA9srXheYxp7jklJSU4dOgQsrKyXukIy/O7pE+fPjh8+DDu3bsnjC8aExODffv21fnS5OTkZMTHx2PHjh3Q1taGh4cHfHx8FL6PW1VzlLFNPNetqTzJK2/qJrzW222a921Wzbv1hDSB+fPnA6i8vyo4OFi4zE1NTQ1dunTB6tWrFcozNTXF1atXq3Vkr169ih49eiiUk5ycjNjYWKSkpCAsLAzjxo1D586dERkZqXBHlleWgYEBzp07V22YhT///FPhP6g6d+6MnJycah3ZnJycJrtkElC+4ZeULUcZ26SqOTyyeA5TVSU4OBgymQwnT55Ex44dkZ2djeDgYAQHB8vdcbxy5Qr2798vDJ2jo6ODBQsWKDR0S5UTJ05U+9KwZ8+eMDExgbe3t8JZRD4zZszAzZs3YWtrW6dbXNq0aYOUlBT06tULN2/eREVFBfr27avwVT1V6jKMzz8pRxnbxHPdiOqhjiwhCkpISAAAmJiYICYmpt6FOLS0tDB//nzs2rULenp6ePToEZKSkuDo6IiAgAAAlX9k1qZjx444e/Ys3NzccO/ePRQXF+ODDz7A7du3FW4Tr6yAgAD4+fnh8OHD6Ny5MzIyMpCYmIiIiAiFcoyNjeHv7w9XV1fo6+sjIyMD8fHxcHd3x9q1awHI9+0+AG73182dOxczZszArl27UFRUhNDQUFy6dEnhy51VNUcZ26SqOTyyevfujR9//BH+/v7w8vJCx44dFW7D3506dQp79uwRsnR1dREYGIhRo0bJnWFjY4MjR47A19dXmHbo0CH069dP4fbw+tKwNryOMcp+L7A8EhMT8dtvv71xfOLaTJ06Fb6+vjh9+jT69OkDHx8fMMaqfakpj2XLliEuLg5lZWVwcXHBsmXL0LdvX6ipqSEzMxMeHh7/6BxlbBPPdSOqiy4tJqSOfH19sXbt2npXgqzqiNVEnk7asWPH8NVXX+H48eP45ptvhEt3jYyMFL4Ei2dWRkYGDh06hMePH0NfXx9DhgwRzq7Iq6pDXxN5OvsAYGtri7179yo8OPvrKNPwS8qYo4xtUtUcXlm8hqkCgBEjRmD8+PHw8vISpv3222/49ddf5S7U4+3tjWvXrkFfXx+6urrIyspCTk4OevXqJZzhk7cC8uTJk3H69GlYWlq+8qVh1XBH8h5HaqIKlwTzypk0aRK8vb0xZMiQOr/unTt3YGxsjOLiYmzduhWFhYWYOHEi9PT05M7gMYyPKucoY5t4rpsyeJKvpJcWt27e5zSpI0sIZ4pW9s3Pz6/3Wd0qubm5aN26NWQyGQ4ePIjCwkKMGDECrVq14pI1fPhwbm0lhKi2ixcvYsqUKbC0tIShoSHS09Nx5coVbNiwQe7Ll2uqfFxF3uJRvL40rM3Bgwfh7OyMFi1aKEXOhg0bMG7cuHofu+uSc+TIEaxevRru7u6wsbGptqy1tXW92kNIc0Id2YZBHVlC6ignJweRkZHVhgVgjCElJQWnT5+WO6dnz55C2XtHR8c6/9Fy48YNnDp16rUFW3j8cVYXx44dQ0hICLKysoRpjDGIRCLcvHlT7pyq7ePh4VGvcv48hyjhNbSQquYoY5tUNYd3Fs/9JCsrCzExMcjKyoK+vj6GDx9ep7MoycnJQkZ9jgEA8OzZM2RlZaFTp051LhYTExMjDJsUEhKC7777DosXL1Y4j1fO5cuXhZzZs2fj119/xRdffAFNTc0myanypkr3IpHojYXDfHx85LqsWt4z8QC/YXxUNUcZ28Rz3ZQBdWQbBg2/Q0gdzZ07F8+ePYOmpia0tLTg7u6OlJQUjBkzRqGcmJgY9O7dG9u2bUO/fv3w5Zdf4tixYygtLVUo57PPPsPp06fx6NGjVx5NJTg4GIMHD8aRI0cQFxeHuLg4xMfHIy4uTqGcqmEB6lvOn+cQJbyGFlLVHGVsk6rm8M7iOQSTvr4+pkyZgsWLF2PKlCkKd2Kzs7Px0Ucf4dNPP8WaNWvwySefwMvLC9nZ2Qq3JT8/HzNnzkT//v0xbtw49OvXD59//jny8/MVyvnuu+/w73//G4aGhrh9+zbU1Cr/lFJ0W/PKiYqKgq+vL7KysoR7Cq9du4YlS5Y0Sc7LEhISXvuoqfr1Rx99JAzTVFWboWfPnhgyZAh69+6Ne/fuwdjYWKF28BrGR1VzlLFNPNdNGYiU9NHsMUJInVhYWLAnT56wCxcusDFjxjDGGDt+/DgbPXp0nTOfPn3Kfv75Z2Ztbc0sLS3Z3Llz2YMHD+Radvr06Sw2NrbOr90QPvzwQ/bw4UOumUlJSSwsLIxZW1szNzc3tmbNGvbs2TO5lrWysmJpaWnCvx89esTS09OZhYWFwu3o3bs3e/z4cbVpWVlZrE+fPpSjpG1S1RzeWbz2k/z8fLZixQrm5OTEevXqxVxcXNjq1atZQUGB3BlTpkxhQUFBrKSkhDHGWHFxMQsKCmKTJ09WqC2MMTZnzhw2bdo0lp2dzRhj7PHjx2zatGlszpw5CuXY2tqyu3fvMsb+f/ukpqYyS0vLJsnp378/u3r1arWcu3fvMmtr6ybJ+buMjAy2fft2FhYWxrKzs9kvv/zCZDKZXMu6ubmxK1euVJt29epVNnjwYIXaYGlpyR4/fsxOnz7NJk6cyBhj7MCBA+zTTz+lHCVtE891UwZP8sqU8tHc0RlZQuqoqrKvubl5vasEFxQU4NChQ1i6dCnWrFkDAwMDTJ8+HcbGxpg6dapcGe+8845wtsHZ2bnaQx7Ozs4oKCgAUHk52N8zFMmq8uWXX2LZsmWQSqUKLfcmV69exX/+8x8cOnTolTL88qgaouRldR3upGpooZfVZWghVc1Rxjapag7vLF77yaJFi5CUlISAgABERUVhzpw5uHDhgkJndi9duoTp06cLdQc0NTUxbdo0XL58WaG2AJVVlBcsWPBKFeWTJ08qlNO2bVtkZmZWm/bixQt06NChSXLU1dVfuRRXJpMpXBuBV87Ljhw5gsGDB2P//v3YvHkz8vPz8euvv8o9/NJff/1V7bLSqja9ePFCoXa8aRgfRcdrVtUcZWwTz3Ujqqt5XxhNSBOaM2cOvvrqK/Tv3x8uLi7w9PQEAFhaWiqUM23aNJw7dw7vvPMO3N3d8dVXXwmVRh8+fCh3leB9+/Zh0aJFeO+99xRbkf9ZtWqVcH9uXYb/eJ0DBw7g3r17cHJywjvvvFOt0Ici9zfxKsPPc7gTXkMLqWqOMrZJVXN4Z/HaT3iM2/rBBx9g79698PPzE6bt3bu3TsO56Ovr488//6xWRbkunf3p06djxowZcHNzQ2lpKbZu3Yr4+HiFaxHwyhk3bhwmT56M0aNHo7y8HEePHsXBgwcxfvz4Jsl52bfffosffvgBDg4OsLa2hpaWFlavXo0pU6Zg7ty5tS4/fvx4+Pn5wdPTE/r6+sjJyUFMTAzGjRunUDt4DeOjqjnK2Cae66YMVGA0LaVExZ4IqQcelX0jIiLg4eGh8D0/f7d48WLk5+dj5MiRrxTmaKrqkDVVHJW30ijAtww/z+FOeAwtpMo5ytgmVc3hncVjP/Hx8YG3tzeGDRsmTNu3bx/279+PLVu2yJVx584dfPbZZ2jdujUMDAyQkZGBgoIC/PTTTwp3ZnlUUa6SmJiIffv2Cdtn+PDhCmfwzKnarlU5I0aMqLbdGzunSv/+/bF161a8++67wvA9ZWVl+Ne//iV3UcSqugpPnjxB+/bt4ezsDDc3N4XbwmMYH1XOUcY28Vy3pvasQDmLPbVv1bzPaVJHlhAVUZfqkE1F0SGKCCHND69xWwsLC5GQkIDHjx+jU6dOcHBwQMuWLevUJl5VlIl8Vq9ejbi4OHz22WcIDQ3F8uXLER0djQ8++ADz5s2rcy79DiHNDXVkGwZ1ZAmpoz/++AO9e/fGW2+9Va+cjRs3YtKkSVBXVxemnTt3DhEREdi2bVs9W/n/vvjiizoN61AfvIYoOnz4MAYNGlTtbGxiYiJ27dqFb775Ru4cnkOU8BpaSFVzlLFNqprDO4vXfsJz3Naq+yK1tbXlGpqlIeXn5yM8PBzOzs6wsbHB5MmT0blzZ8ydO1eh+0l55ZSXl2P79u3o3bs3zM3NERQUBCMjI3z66aevXMHSGDl/z/zxxx9fOcs7efJkSCS1/wG9d+/ealfvMMbw+++/Y926dTh+/HiNy/IaxkdVc5SxTQ0x9JKykBZU1D5TE9BpVbd9W1k07244IU1o2bJlWLFiBezs7OqVExYWhrFjx1bryL733ntITk6ubxOrOXv2LIqLi7lm1mbu3Llo164dNDU1IZPJ4ODggIiICIWHKJozZw4GDhxY7ZJtQ0NDxMbGKpQTFBSENm3aVBuiZP369Vi8eLHC9xIGBwdj5MiR8Pb2rvbeKUpVc5SxTaqawzuL137CY/zqp0+fYtGiRTh58iQqKiogFovh4uKCoKAgtG/fXqGsgoICfP/994iPj8ezZ8/w9ttvw83NDTNmzFDoDO/ixYvx5MkTjB07FkDl0GcbN27E8uXL5TrDzDtn+fLlSExMFG4hsba2xubNm/Hs2TN8/fXXjZ7zMolEghkzZmDGjBl1Wn7t2rV48uQJpkyZgvj4eISFhUFTU1OugmEfffSR8O/r168jJiYG3t7eMDQ0RGZmJn777Te4uLj8Y3OUsU081438QzRafWRCVMzmzZvZ1KlTWXl5eZ2Wv3DhArtw4QLr1q0bO378uPDz+fPn2bfffsuGDRvGtb1Vwym8iZOTE8vPz2eMMebo6MicnJxeebi6ujJfX19hyIja1HeIokePHrFHjx6xbt26sTt37gg/Z2RksF9++YW5urrKlVOF5xAlvIYWUtUcnlmU07hZvPaTbt26MRMTk9c+5OXr68umT5/Obty4wZ49e8aSk5PZtGnT6jT8zuzZs9nHH3/MYmNjWVJSEjty5Ajz8vJSePid1x1L09LSmI2NTZPk9O3bl6WkpFSbdu/ePWZnZ9ckOS+7devWK9NSUlKYv7+/XMs/efKEjRo1irm4uLChQ4ey//znP3VqB69hfFQ1RxnbxHPdlMGz/HKlfDR3dEaWkDp666238OLFC4wcORJjxoyp9o3+iBEjal1+/vz5ACrvYQ0ODhYup1FTU0OXLl2wevXqBmn3m8hTtZgxhtOnT+Orr77Cvn37as2sGqLIzc2tTkMUOTk5QSQSQSQSCVWhgcpt1qVLFyxdulSunCpVQ5S8/P7UdYiSqqGFQkND63W5tqrmKGObVDWHdxav/eTle/OLi4tx7do1bN68GbNmzZI748qVK9i/f79QtEpHRwcLFiyQ6xj7dzyqKFe14e7du9W2x4MHDxS+zYRXTosWLSCVSqsVDHzx4oXC95DyynnZJ598gjVr1sDGxgZPnz7FDz/8gIMHD2L06NFyLd+hQwf88ssvmD17NhhjcHR0rFM7eA3jo6o5ytgmnuumDKhqccOgjiwhdRQdHQ11dXW0a9cOR44cEaaLRCK5/shKSEgAAJiYmCAmJkahSscNwcbG5rX//rt3331X7vtT6jtE0a1btwBUbqOLFy+iTZs2ci33JjyHKOE1tJCq5ihjm1Q1h3cWr/3k7xWT3333XfTv3x9+fn5yd0hsbGxw5MiRamNFHzp0CP369VOoLQBgamqKq1evCh1ZoHJs6h49eiiU4+/vjy+//BIjRowQts+BAwewfPnyJsmZOHEiPv/8c0yaNEnI2bp1KyZPntwkOS/7/vvvMWvWLNjb2yMuLg5Dhw7Ff/7zH2Es39d53X2SMpkMly5dgqenp1CcS5HPNa9hfFQ1RxnbxHPdiOqiYk+ENDFfX1+sXbsWWlpaDfo6NjY22LdvX53OPr7swoUL+OGHH/DLL7/INT+PIYoGDx6MPXv21LlS6ct4DVHCa2ghVc1Rxjapag7vLIDvUD4v++uvv+Dp6YkTJ07INb+3tzeuXbsGfX196OrqIisrCzk5OejVq5dwplDeDg2vKspA5ZnivXv34vHjx9DT08OoUaPQq1cvuZZtiJxDhw4hOjq6Wo6842s3RM7LHjx4gClTpsDV1VW4EqkmNX2WX6bo55rXMD6qmqOMbeK5bk3teaFyFnvSbtm8iz1RR5aQBsKrSjCvnKox/OrbkVVGoaGhmDZtmvDHaFPiNSyEqubwzKKcxs1S1N/PrMlkMty9excDBgzAt99+K1dGbZ0aea+AAfhWUSZv9rrt/OzZM+zatQtDhgxBly5dACjHtla2fVbZcnhmKVtOY6OObMOgS4sJaSC8qgTzyjlw4AC38RLl7Vw31tBCe/bsgY+PT60dWZ5DlPAaWkhVc5SxTaqawzuL137ycgVSoLLTqaurC1tbW7kzajvr9vHHH+PDDz+s8VLVKrV1nL744gtIpdJaj2uXLl3CmjVrkJWVhb+fC1BkzG5eOQ8ePMCGDRtem6PI5be8ch49evTa6cOHD6/x+dcpKyvDTz/9hISEBGRlZWHz5s0ICAjAd999B0NDQ7lz6jOMzz8hRxnbxHPdiOqijiwhKqK2TqO+vj6315K3c91YQwvJe2EJzyFKeA0tpKo5ytgmVc3hncVrP6n6I/TZs2fIyspCp06duI9jnZKSgvLyci5Z586dk+u4NnfuXPTu3RvTpk2r1/bhlfP5559DW1sbnp6eSpGjyNBBtVmyZAlu3LiB0aNHIzQ0FFpaWrCwsEBQUBB+/vlnuXPqM4zPPyFHGdvEc92ICmuM0siE/BPVNtwN7xwTExOWl5dXbVpOTg7r2bNnvdugaJuUbWihKjyHKKnv0EKqnqOMbVLVHN5ZvPaTvLw85ufnx0xMTJi5uTkzMTFh/v7+rxyn6oPXcVaRLCsrK5aens7l9XjkWFhYcNkGvHL+7tKlS+ybb75hs2fPZhkZGSw0NJQVFxfLtayVlRVLS0sT/v3o0SOWnp7OLCwsFGoDr2F8VDVHGdvEc92UwfPCcqV8NHdqTd2RJoTUz8WLF3Hx4kUwxnDp0iXh5wsXLiAqKqraUAqNZf78+Zg/f74wtFDVz4GBgbhx40ajDy1UpWqIEqlUWu+sqqGFzM3N6zS0kKrnKGObVDWHdxav/SQ4OBgymQwnTpxAcnIyjh8/jrKyMgQHB9crt6lNmjQJa9euRVlZmVLkjBw5Ejt37qxXBs+cl0VFRcHX1xdZWVmIi4tDWVkZrl27hiVLlsi1vJ6eHhITE6tNS0tLg4GBgULtqBrG5/3334eBgUGdh/FR1RxlbBPPdSOqiy4tJqSB/H34gIbKUbbxaIHGH1pI3m3Nc4iS+g4tpOo5ytgmVc3hncVrPzl16hT27Nkj3L+qq6uLwMBAjBo1SuE2KZOMjAycPHkSTk5O6N27N1q1aiU8p8hltbxy2rVrh127duH06dPo27dvtRxFCirxynnZxo0bsWXLFvTq1QvW1tbQ0NDA4sWLMW7cOKxcubLW5efOnYsZM2Zg165dKCoqQmhoKC5duvTGsc5fxmsYH1XNUcY2NcTQS0S1UdViQhoIryrB8uaYmJggMTGxUcajlXcon8YaWkjebcR7iBIeQwupco4ytklVc3hm8dpPRowYgfHjx8PLy0uY9ttvv+HXX3/Fvn37FGrTm/AaVkyRrJqqHyvS4eOVExAQ8MbnFOkQ88p5mZOTE9asWYOePXsKx+n8/HxMnToVf/zxh1wZaWlpOHjwIHJycqCnp4chQ4bIVeiJ1zA+qpqjjG1qqKGXlEFukaypm/Ba7Vo074tzqSNLSAPJysqCrq4u1NTqd5CQN6exOo2A8g3lc+nSJZibm9e5JH9zLedPSGNSdD+5ePEipkyZAktLSxgaGiI9PR1XrlzBhg0bYGVlxaVNPI9FynZcUwWbNm3Cxo0bMXr0aGzbtg2ff/45Dh48CA8PD3z22WcKZZWWlkIiqbyQsL6/VwlpbNSRbRjNu/WENKH09HTMmTMHjDFcu3YNnp6e8PT0xKVLlwAA+vr6cv2y3bhx4yv3SJ07dw4+Pj4K5WzatKlROrFA5aWHenp6tc5X2zaSV1lZGdavXw9vb28MGDAAd+/ehZeXF9LS0gAAffr0kesP7JycHCxZsgSffPIJJkyYgAkTJsDHxwdOTk4KtQeo/X37p+coY5tUNYd3Fq/9xNraGocPH0bfvn0hEonQt29fHDlyROFObGlpKbKyspCZmVntAVR2lnl1POU9rhUWFmLTpk1YuHAhAgIChIe849nyzmGM4ciRI4iMjMTatWuFh5+fX5PkvMzX1xcBAQG4du0a9PX1cerUKUycOFHuTmx+fj6CgoLw4YcfwsLCAnfu3MHAgQPx3//+V6F2VP0O+fjjj6v9DklPT6ccJW0Tz3Ujqos6soTU0fz589G6dWuIRCKsWrUKDg4OcHJykruIRZWwsDCUlJRUm1aXIWqOHTsGJycnmJqaCg8TExOYmpoqlAPw61zz2kZLlizBsWPH4OXlhYKCAmEIBkXL8M+dOxfPnj2DpqYmtLS04O7ujpSUlDoNUcLrfVPVHGVsk6rm8M7iuZ/o6+tjypQpWLx4MaZMmaLwWNbbtm2DlZUVnJycqj2cnZ0Vbguv49q8efMQFxeHe/fuIT09HTo6Ojh69Cj69u2rUHt45SxcuBBhYWHYt28f4uPjce/ePURGRip8STmvnL8bMWIEtmzZgsOHD2Pz5s0YNmyY3MsGBgbi8ePHCA0NRYsWLdCmTRv4+Phg6dKlCrWh6nfIqFGjqv0OCQoKohwlbRPPdVMGIpFyPpo7KvZESB3duHED3333HQoKCnDz5k1ERUVBKpVi69atci1/8eJFABCqDbds2VL4+dSpUwpXG+Y5Riqv8V/ru42qHD16FNHR0TA0NMS3334LsViMSZMmCQVt5JWcnIzY2FikpKQgLCwM48aNQ+fOnREZGSn3PWm83jdVzVHGNqlqDu+sKjz2EwDIzs7GsmXL4O3tDXt7e4wcORLt27fHqlWr8Pbbb8uVER4ejrlz52LMmDFKc1w7d+4cDh8+jHv37mHjxo2YO3cuTExMFL7vl1dObGws9uzZg7t372LXrl1Ys2YNfvnlF+Gz0dg5fxcTE4OEhARkZWUhJCQE3333HRYvXizXmMJnz57FwYMHoaenBzU1NYhEIgwfPhzr169XqA28foeoao4ytonnuhHVRR1ZQuqoU6dOOHLkCEpKStC7d29IJBL8+eefcl/mxrvasEgkwujRo2FkZKTYiryE9x/F9d1GVaqGYHi5wEddhmCoGqLEzc2tzkOU8HrfVDVHGdukqjm8s6rw2E8AICgoCG3atIGJiQmAyo7k+vXrsXjxYkRERMiV0bp1a9jZ2dWrE8v7uNamTRukpKSgV69euHnzJioqKtC3b18sXry4SXLU1dVRUFCA3r17Y8GCBQCAQYMG4fvvv2+SnJd999132L9/P4YNG4bjx48LZ7wXL16M8PDwWpd/5513sHfvXkyfPh0ikQgikQhXrlzB+++/r1A7eP0OUdUcZWwTz3UjKqyBx6klRGWdOnWK9evXjzk7O7OkpCR29uxZZm5uzo4ePapQTrdu3VheXl6927N7927m6+vLnj17VucMR0dH5ujoyExMTJiDg4Pws7OzM/v000/ZrVu3FMrjtY1OnDjBevTowUaPHs26d+/OPv/8c9avXz926tQphXKOHj3KzM3N2bNnz9jXX3/NXFxcmIuLC/v0008VymGM3/umqjk8syincbN47Se9e/dmjx8/rjYtKyuL9enTR+6M+Ph4NmbMGHb79m2FXvtlvI9r27dvZ927d2fPnz9n06dPZ2PHjmVjxoxho0ePbpKc77//nvXp04f99ddfbPz48WzWrFns888/Z0OHDm2SnJfZ2tqyu3fvMsYYs7KyYo8ePWKpqanM0tJSruWTk5NZ3759Wf/+/ZmZmRkbPXo069+/P7t27ZpC7eD1O0RVc5SxTTzXTRn8VVShlA8ebt++zT766CNmZWXFQkJCmEwmU2j5L7/8ki1durROr01ViwnhpKioCDKZrNrYe/LgVW3Yx8cH9+7dQ1FRUb3HSG2ooXzquo2Aym9iDx06hOzsbIWGYPg7XkOU8HrfVDVHGdukqjm8swA++8mwYcPw6aefVitetG/fPmzevBkHDhyQK8PJyQkvXrxAUVER2rZtW+314+Pj5W4LwPe4dufOHRgbG6O4uBhRUVEoKCjAxIkT5SoW1RA5x48fh62tLaRSKcLDw1FQUAA/Pz/hbHhj51QZNGgQFixYgIEDBwpVoZ88eYJ58+bh6NGjr10mKCgI+vr66NSpEzp16oTWrVvjzp07ePLkCfT19WFvb482bdoo3Ja6DuPzT8lRxjbxXLemllesnFWL22jVr1xSaWkp3N3d0b9/f/j6+mL58uUYNGiQ3OOFnzp1SjgetG3bVuHXp44sISqC5xipjTmUDyFENZ07dw5+fn6wtrZG586dkZGRgcTERERERMDOzk6ujAsXLrzxORsbG4XaQ8e1xrdv3z4EBQXBzc0NcXFxGDNmDOLj4zFz5sw3VmdesWIFnjx5gpycHDx58gRPnz5FSUkJOnToIHRu9fX1MXfu3Dq1idcwPqqao4xtUoWhl1S1IxsXF4fAwECcOHECLVq0wK1bt7BkyRLs2LGj1mWLi4sxdOhQTJs2rdp444ponp8GQlQIr2rDI0eOfONDUY05lI88srOzMXPmTJw4cQJA5bpOnjwZT548USiH5xAlvIYWUtUcZWyTqubwzuK1n9jZ2eHgwYPo06cPgMrheA4ePCh3Jxao7Kza2NhAS0sLz58/h5aWljBNUbyOa4cPH0ZFRUW1aYmJiQp3rHjlJCcn4+/nJJKSkhAWFtYkOS+rqljcokUL2NjYoLCwECEhITUOMTR37lz4+/vD19cX48ePx6hRo9CzZ0/k5OTg7t27ePDggcJDsPAaxkdVc5SxTTzXTSmIlPNRWlqK/Pz8ao/S0lK5V+vWrVvo1asXWrRoAQDo1q0b7t+/L9eyERERKC4uhkQiwblz5145/siDzsgS0sQ+/PDDN1Yb7ty5s9w5JiYmQqGXv7t586ZCbTp27BhCQkKQlZUlTGOMQSQSKZzFw5QpU9CmTRvMmzcPurq6SElJwfr165GXlyd30RgAMDU1xcWLF6tdWvjkyRO4uLggKSlJoTaNGzcO77//PpYsWYJx48ahT58+UFNTwx9//CH3ZZOqnKOMbVLVHN5ZPPeTmnzxxRe1Vq/Nzs7G9OnT8fDhQ3Ts2BE5OTkwNjZGRESEwkP58DquvW77ZGdnY9CgQbh69apS5GRmZmLIkCG4cuVKo+e8LC4uDqampgr9Lqv6ElcikeDDDz9Ev379YGFhAQMDA7kqHb/O559/jqKiIkyYMAFffvklDhw4gIMHDyI+Ph67d+/+x+coY5t4rpsyyCtRzjOyP29Yh7Vr11abNnPmTPj7+1eb5ufn99orZMRiMTw8PKoVqbO1tcXRo0fRrl27N75uZmYmBg0ahJ49e6Jfv36Ii4uDvr4+1q5d+8a/ZV+HqhYTooCXf9G/ruNYlz+KeFQbBqrfL1ZcXIxr165h8+bNmDVrlsJZ9RnKpyG2UWJiIo4cOSL84dq1a1fMmjULQ4cOlWv5hhiihNfQQqqao4xtUtUcXlkNsZ/U5OzZsyguLq5xnkWLFqFHjx7YuXMnNDQ0UFJSghUrViAoKAgbNmxQ6PXqO0RZZmYmgMrtkZWVJdzrzxjD8ePH0bFjx0bNqfK68xG3bt1S+D5SXjkvW79+PdLS0iASiWBmZgZTU1N0794dZmZm6Nq162uXWbduHdLT05Geno60tDTs3LkTP/74I3R1ddGlSxcYGhrCyMhIoUsReQ3jo6o5ytgmnutG3mzq1Kn45JNPqk3T0NB4Zb6lS5e+9ngdFRX1yt95mpqaKC4urrEjGx0djQ4dOmDLli3Q0NDAhAkT4OTkhDNnzqB///5yt586soQoIC4uTvi2WtFCI2/y5ZdfYtmyZQgNDa3zt83Aq2dv3333XfTv3x9+fn5wdHRUKKs+neuG2EYGBgY4d+5ctcvRmnKoI4Df0EKqmqOMbVLVHF5ZDbGf1NelS5cQExMj/GGlqamJadOmYdiwYQpn1fdLQycnJ2EImJfHshSJROjSpQuWLl3aqDlVXxSKRCJYW1tXe65FixZYvnx5o+a8zu+//w6gskP8xx9/IC4uDps3b67xy0yxWIyWLVtCR0cHZWVlkEgkePz4MW7cuIEbN26gXbt26Ny5s0IdWV7D+KhqjjK2iee6KQMR5D/L2Jg0NDRe23H9uw4dOrxx+t27d6tNKygoqPXLwuzsbNja2gqv3bp1a3Tp0gUZGRlytvx/6lTrmBDCzfjx45mtrS3r1asXGzlyJPPx8REe9ZWbm8sGDhyo8HI8hvLh6ezZs8zCwoJNnjyZBQcHM19fX2ZhYcHOnj2rUA7PIUp4DS2kqjnK2CZVzeGdxXM/qUnVcCw1GTt2LFu3bl21aWvXrmVjxoxR+PV4Hde6devG/vrrr3pl8MjJyMhg6enpzMTEhN26dYtlZGSwjIwMlpmZycrKyho953W8vLzYJ598wgICAtiPP/7Ijhw5wm7evMkKCwvfuIyjoyP717/+xb766isWFhbGduzYwU6cOMHu3r3LCgoK6tQOXsP4qGqOMraJ57opg7ximVI+6uvs2bPM1dVV+Dk9PZ2Zm5uz8vLyGpdbu3YtmzVrlvBzRUUF69+/Pztx4oRCr0/3yBJSB3/99Rdu3ryJZ8+eAQDat2+P7t2712lYB17Vhn18fKpd3iGTyXD37l0MGDAA3377rUJt4jGUD89tBAAZGRk4dOgQHj9+DH19fQwZMkSh+66Ahq1aWp+hhf4JOcrYJlXNqW9WY1X3rRqOpaazxnfu3MFnn32G1q1bw8DAABkZGSgoKMBPP/2k8JkZXkOUDR48GHv27BEuva4rXjk9e/bE2bNn6z2sEK+cl61YsQIZGRkoKyuDpqYmjIyMYGxsjK5du9apYFd92tG5c2fk5+dDS0sLenp6dRrGR1VzlLFNPNdNGeSXKGd3q7Vm/c4Ul5eXY8CAAZg/fz5GjBiBRYsWIScnR7gEPD8/H5qamq+coX3w4AFGjRqFkJAQ9OrVC9u2bcPvv/+O+Ph4hY5B1JElRAFlZWVYunSp0PnU1taGSCTC8+fPoaamhn/961+YN29ek7Tt7x1ikUgEXV1d2NraKnTj/OuyXlZb51qZtxEhRHnY2Nhg3759tV7+XFhYiISEBDx+/BidOnWCg4NDnTp/PIcoI/IpLy9Heno6UlJScOvWLcTHx+P69eto164dzp8/32jtWL16NR4+fIiHDx8iJycHRkZGMDMzQ/fu3TF69Oh/fI4ytonnuimDglLl7G610qj/Jc9xcXGYM2cOWrVqhYqKCvzyyy/CF41OTk4IDAyEi4vLK8sdP34ca9aswYMHD2BkZIQlS5YIVe7lRR1ZQhTwzTffICYmBitXroSdnR3EYjGAyrOf58+fR2BgIMaOHYspU6bIncmz2jAAPHv2DFlZWejUqVO97rmtq4bYRryqjaanp2PNmjX49ttv8d///heBgYEAKovAKHrwJERVNdZ+Is8Z2SoymQwvXrwQvhjjqbS0VK57xKrk5uYKhfTS0tKwatUqMMYwd+5cvPvuu42eU1ZWhr179+Ljjz+GVCpFREQEGGOYNm0a3n777UbPeVn37t3Rvn17mJmZwcTERCj4ZGhoWKe8uioqKsKDBw+QkpKCe/fu4dSpU0hPT0eXLl3w22+//eNzlLFNPNdNGahyRxaovOf12rVrsLS0bNS/PakjS4gCHB0dERQUBCcnp9c+/8cff2DlypWIjY2VO/PRo0fCv/9ebViRIk35+fmYP38+EhISoK6ujrKyMri6umLlypUKXypWn851Q2wjXkMU8RyihBBV1Vj7SVZWFnR1daGm9uYh7Z8+fYpFixbh5MmTqKiogFgshouLC4KCgtC+fXuFXi8nJweRkZFITU0Vxm9ljCElJQWnT5+WO2fy5MmQSCSIjIyEr68vdHR0oKamhtTUVOzcubPRc+bMmYO0tDT89ttv+PLLL5GbmysUx/npp58aPedlT58+fWORGAAIDQ3FtGnTaqxuyoOJiQn69OkDBwcHWFlZwdjYGNra2pSjxG3iuW7KQNU7sk2FOrKEKKB79+44derUG79tevbsGQYOHIjr16/X63WePn0KPz8/hcZK++qrr1BQUIAlS5agY8eOyM7ORnBwMFq1aqXwPbL16Vw3xDbq168fduzYUe8hiiwsLHD06FG0bt0a/fv3x8WLFyGVSuHm5ibXuI28hhZS1RxlbJOq5vDOell995Mq2dnZWLZsGby9vWFvb4+RI0eiQ4cOWLlypdxn+CZPngx1dXX4+/tDV1cXjx49QkREBCoqKhQefmfixIlo164dSktLIZPJ4ODggIiICIwZMwYzZ86UO6d37944fPgwdHR0YGtri3PnzuGvv/5SePvwyrGyssLevXuhp6cHW1tbHD9+HAUFBRg8eLBC47/yylGEvJeX11dcXJxwdi8nJweMMWhra6Nr164KvfeqmqOMbeK5bsqgUEk7si2beUeWht8hRAEVFRWYNGmScLns35WXl0Mmq/+g1xoaGsjOzlZomVOnTmHPnj3CGIS6uroIDAzEqFGjFH79+gzl0xDbiNcQRfUdooTX0EKqmqOMbVLVHN5ZL+M1LFBQUBDatGkDExMTAEBYWBjWr1+PxYsXIyIiQq6MK1euYP/+/cIxSUdHBwsWLKg2FJe8kpOTERsbi5SUFISFhWHcuHHo3LkzIiMjFfrDWFtbG1evXkVJSQlMTEygpaWFixcvKnyGmFeOlpYWcnJykJGRgS5duqBNmza4e/euwlfi8MpRRGOdS2nTpg3atWuHdu3a4fnz57h//z5SUlJqHcf4n5KjjG3iuW5EdVFHlhAFrFq1intmTdWGFaGvr48///yz2th6dR2T8nXk7Vw3xDY6cOAA7t27Bycnp3pVGw0MDMTXX38NLS0thIWF4dy5c1i4cKHcZ6xf7uArWjH5n5CjjG1S1RzeWS+r735SJTExEUeOHIGuri4AoGvXrpg1axaGDh0qd4aNjQ2OHDkCX19fYdqhQ4fQr18/hdoCAB07dsTZs2fh5uaGe/fuobi4GB988AFu376tUM4XX3yBuXPnQl1dHWvWrMGVK1cwc+ZMfP31102S88knn2DChAkQiURYvnw5bty4AX9/f4wZM6ZJcpRRcHAwunfvDlNTU9jb28PU1BRvvfUW5Shxm3iuG1FddGkxIU2MV7XhixcvYsqUKbC0tIShoSHS09Nx5coVbNiwAVZWVgq1iedQPjw0VLXRug5RwmtoIVXNUcY2qWoO76zXqet+MmzYMHz66afVzp7u27cPmzdvlvteW29vb1y7dg36+vrQ1dVFVlYWsrOzYWFhIRRokvfLrGPHjuGrr77C8ePH8c033yAxMREAYGRkpPA9oIWFhRCLxdDU1MSLFy/w/PlzdO3aVaEMnjkPHjyApqYmOnfujOzsbNy7d69OnX1eOfJSpOAXIc1ZYZlydrdaqjfvS4upI0uIkuBRbTgrKwsxMTHIysqCvr4+hg8fLpwNUQTPoXwakqLVRuuL19BCqpqjjG1S1RzeWQ3h3Llz8PPzg7W1NTp37oyMjAwkJiYiIiICdnZ2cmXU9CVWFUW+zMrNzUWrVq3AGENMTAyKioowfPjwBr18lrxZY90jS0hTo45sA2GEkCaVl5fH/Pz8mImJCTM3N2cmJibM39+f5eXlNXXT2NOnT9m1a9fYs2fPmrQd2dnZLDg4mE2aNIn5+PgwHx8fNn78eNavX79Gbcfq1avZgAED2KlTp1h5ebkwvaKigp09e5Y5ODiwH3/88R+bo4xtUtUc3lkNJT09na1fv54FBwezH3/8kWVkZCi0/KNHj974IM2flZUVvZfkH6GgVKaUj+aOOrKENLE5c+awadOmsezsbMYYY48fP2bTpk1jc+bMUSjn8ePHbMaMGez48eOMMcZGjBjBPvvsM5aTk6Nwm5Stcz1hwgTm7+/Ppk6dyiZPnsx+/fVX1q9fPxYeHt6o7XBwcGDx8fFvfD4hIYG5uLj8Y3OUsU2qmsM7q6GVlJSwiooKVlFRodBy3bp1YyYmJsL/X34o6ujRo8zR0fGVnLpkET4SExNZSUlJUzeDkAZXWKqcj+aOij0R0sR4VRvmUSG0SnBwMGQyGU6cOFFtKJ/g4OAmuUe2PtVGeQ5RkpOTAwsLizc+37NnT2RmZv5jc5SxTaqawzurIYbyyc/PR2hoKOLj4/HixQtER0fD19cX69evR48ePeTKuHXrlvDvqqHA1q5dCz8/P7nbUSU4OPiN41HXxtnZGQcOHECrVq3g5OT0xlssaqsezStnwoQJ+PHHH9GiRYtXahq8rLb7h3nlvMmLFy+wZcsWzJo1C2lpaVi1ahUYY5g7dy7effdd9OnTp065hBACUNViQpocr2rDPCqEVuE5lA8P9ak2ynOIEl5DC6lqjjK2SVVzeGc1xFA+gYGBKCoqQmhoKL788ku0adMGPj4+WLp0qUJjZFfR0tKCtbU1IiMjMX78eERHRyu0vEgkwujRo+s0HvWqVavQokULAEBISIjCy/POGTlypNAZ/+ijj5o8503mzp0LiaTyT82lS5dCR0cHampqWLBgAXbu3Mn99Qgh/yzUkSWkiS1YsABTpkzBkSNHXqk2rAgDAwOcO3euWoXQug6/09BD+Shqzpw5+Oqrr9C/f3+4uLjA09MTAGBpaVnrsjyHKOE1tJCq5vDMopzGzWqIoXzOnj2LgwcPQk9PD2pqahCJRBg+fDjWr19fr9xnz54hJydH4eXqMx61jY3Na/+tKF45Lxe4qk/ldl45b5KYmIjDhw+jpKQEly5dwrlz5/DXX3/Bzc2N+2sRosyUqE6mSqGqxYQoAR7VhnlUCK3CcygfXnJzc9G6dWvIZDIcPHgQhYWFClUbbeghSghRBTz3k48//hiOjo6YPn06bGxssH//fly9ehVbtmyR+4zs3y+/lclkePLkCSZMmCBXRea/Xy579+5dFBUV1Ws8aiI/JycnzJ07FyUlJdi1axd27NiBU6dOITg4mNuZf0Kag+Lypm7B62k181Oa1JElRIVkZGTg0KFDePz4MfT19TFkyJA6n13hNZRPU1P2IUoIUQYNsZ8kJydjypQpUFdXh1Qqhbm5OR49eoTIyEi575G9cOFCtZ9FIhH09PRgaGgo1/LyDN8DNMzZSALs378fCxYsgLq6OtasWYO2bdti0qRJ+PrrrzF27Nimbh4hjYY6sg2DOrKENLHs7GwsW7YM3t7esLe3x8iRI9G+fXusWrUKb7/9dlM3Tyls3LgRkyZNqlag5dy5c4iIiMC2bdtqXPabb75BTEwMVq5cCTs7O+F+QplMhvPnzyMwMBBjx47FlClTGnQdCFFmDbWf5OXl4Y8//kB2djb09PTg4OCANm3aKNy+5ORk4Uu1nj17Krx8fdVUmOlltZ1l5JVTU2Gml9V2pplXTk0KCwshFouhqamJFy9e4Pnz5+jatWud8wghpAp1ZAlpYlOmTEGbNm0wb9486OrqIiUlBevXr0deXp5C1YbT09OxZs0afPvtt/jvf/+LBQsWgDGGxYsXK3w5sLJ1rl+uqFrlyZMncHFxQVJSUo3LOjo6IigoCE5OTq99/o8//sDKlSsRGxvLtc2ENCcNsZ/8+uuvcHFxqdeVHNnZ2Zg+fToePnyIjh07IicnB8bGxoiIiFA493XHtQ4dOmDlypW1HtdePjN86tQpHDlyBJ999hkMDQ2RmZmJn376Cfb29ggMDGyUnJfPNF+/fh0xMTHw9vYWcn777Te4uLhg6dKljZJDCCFNomlG/SGEVOnduzd7/PhxtWlZWVmsT58+CuWMHTuWLVq0SPj3t99+y8LCwpinp6fCbZo8eTKbPXu20K4HDx6wefPmsenTpyucVR8XLlxgFy5cYN26dWPHjx8Xfj5//jz79ttv2bBhw2rNMDMzY8+ePXvj80+fPmVmZmY8m01Is9MQ+8mgQYPYiRMn6tWuKVOmsKCgIGGs0eLiYhYUFMQmT56scBav49qAAQPYnTt3qk27c+cOc3R0bJIcNzc3duXKlWrTrl69ygYPHtwkOYQQ0lia+ZXRhDR/vKoN37hxA9999x0KCgpw8+ZNREVFQSqVYuvWrQq3iedQPvUxf/58AJX3xQUHBwuXwKmpqaFLly5YvXp1rRk8hyghRFU1xH7i5+eHyMhI9OnTB61atapTuy5duoSYmBhoaGgAADQ1NTFt2jQMGzZM4SxexzWRSISMjAy8//77wrTMzEyUlyt2ExyvnL/++gsVFRXVpslkMrx48aJJcqytreW6XPnv9z8TQoiiqCNLSBMLCAiAn58fDh8+/Eq1YUV06tQJR44cQUlJCXr37g2JRFLnIXN4DuVTHwkJCQAAExMTxMTE1KlyKs8hSghRVQ2xn6SlpYExhkGDBmH48OHC+KkAMHPmTLkyPvjgA+zduxd+fn7CtL1791br/MmL13Ft5syZ+OKLL9CvXz/o6+sjJycHp0+fxtdff90kOePHj4efnx88PT2FnJiYGIwbN65JctatW6fQ/IQQUld0jywhSoBHteGqP4C0tLQQFhaGgoICTJ06Fd9++63CY/bxHMqHB19fX6xduxZaWlqN/tqEkLoJCAh443Pydpzv3r2LTz/9FK1bt4aBgQHS09NRUFCAzZs3K9yZ5Xlcu3XrFuLi4vDkyRO0b98ezs7O/9fevcdUfd9/HH8dEPFaHdoCotQSleO0rdrBosVLT53O2/S4UonutCbWpiqZNlWrZgLKzwttQ9xFoHEuarPazkS8kJpSGVocp5uHkaqVOukwKkXtqthacVg4vz8aiQwv38P5ci7yfCQm5fvteeWd8wfx7ef7fb81ZMgQjzLMzCkqKmqR05pdrWblAIAv0MgCD6i6ujo1Nja2+pE+M1f5AIAn6uvr5XQ61b17d1mtVhUXF6uqqkr9+/fXuHHjWr3/ubq6WgUFBW36e23x4sVKT09XREREQORkZWXplVdeUY8ePQIiBwDMQiML+JmZ04YfVP/7Hd2a6JmRkaGnnnrKz9UBMNOJEye0YMEChYWFac6cOZo3b54kKSUlRefPn1dDQ4P++Mc/turk0hcSEhK0d+9er1/FMCsnMTFRe/bsCZgcADBLiL8LANq7119/Xd26dZPFYtGGDRs0duxY2Ww2v647OHfunF577TW53W4dP35cv/jFLzRt2jS5XC6/1PO/39G4ceNks9m0Zs0av9QDoO2kpaVpwYIF+utf/9rUxErSe++9pyNHjsjhcCgtLc3j3OLiYo8HFz0IzDqv4NwDQKChkQX87OTJk1q4cGHTtOHFixdrzpw5Onv2rN9qCrTmOhC/IwBto6qqSklJSXe9P23aNH3xxRce52ZmZqqiosKb0gAAAYSpxYCfeTNtePDgwTp69Ki6desmq9XaYuWB2+2WxWLx+C9vZq7yMYOZE5kBBLbRo0fr//7v/7Rhwwb16tWr2b3vvvtOmzZtUmJiose5DodD27dvV2Ji4l3XDAEAggeNLOBnq1atajZt2Ol06je/+Y3eeuut+3724MGDTUNPioqKTKsp0BpHb74jAMFl3bp1WrFihUaPHq1+/fqpV69eCg0N1dWrV3XmzBkNGDBAeXl5Huf27NlTtbW1stvtSklJUZcuXZru3b6Sx1tGdqi25xwAMAvDnoAA4+20YTOYucqnLQTCdwSgbZ0/f17//Oc/dfHiRX3//fd66KGHNHjwYI0YMaJVeQ6H447XLRaLduzY4U2pzQTasKdAywEAs9DIAg+Ab775RhUVFfr6668lSb169dKQIUNavaLif9E4AoAxNTU1ioyMVEiId2NIzMopKyvT448/ro4dOwZEDgCYhUYWCGI3b97U2rVrlZ+fL0n60Y9+JIvFoitXrigkJERz5szR8uXL/VwlAASW+vp6hYWFye12e9woFhYWauPGjaqpqWm61pp5BEuXLtWKFSvUu3fvpmuff/650tPT9f777xvOKSsr06ZNm1RTU9NisrAnr5yYlQMAvsI7skAQ27Rpkw4fPqy8vDyNHDmyaYBJY2Oj/v73v2vVqlXq2bOnXn75ZT9XCgD+de3aNWVlZamoqEi1tbXavXu3XnrpJeXl5Wno0KGGczIyMmS325WcnKywsLBW1xMWFqYpU6ZowYIFeu6557R582bt2rVL8+fP9yhn2bJlGj58uF555RWv6jErBwB8hRNZwA/Mmjb8zDPPaPXq1bLZbHe8X1xcrPXr1+ujjz4yrXZfaauJzADap1//+teqq6vTCy+8oCVLlmjfvn0qKChQUVGR/vKXvxjOefrpp7Vz507FxsZ6XVNlZaVef/11nTp1Sk899ZTeeOMNRUZGepSRkJCg/Px89e3b16tazMoBAF+hkQX8oLq6WjExMU3/fTe3/p+7GTJkiEpKShQREXHH+19//bXGjBmjzz777L41BVrjaNZ3BACS9JOf/EQFBQWKiopqGlwUEhKiSZMmqby83HDOrl27VFhYqKysrLv+7jWipqZGv/3tb/W3v/1NkyZN0t69e/X888/rlVde8WgewebNm3Xu3DllZmZ6dZJqVg4A+AqPFgN+cHvz5U0j1tDQoLlz5951J+L333+vxsZGQ1lttcqntcz6jgBAkuLi4pSfn68FCxbIYrHIYrGovLxcAwcO9Chn3759qqyslM1mU1xcXLOhep5MP548ebKee+45HThwQN26ddPcuXO1du1aTZw4UUeOHDGcc/78eX388cey2WwaPnx4syZ4w4YNPs8BAF/hRBbwI2+nDd8a8nQ/dru91TX6W1tPZAbQPhw/flzz589XWFiYLl++rMcff1zV1dXKzc31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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 66
  },
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-09-19T03:49:20.856250Z",
     "start_time": "2024-09-19T03:49:18.764896Z"
    }
   },
   "source": [
    "\n",
    "# ------------------------------------  第六部分 模型评价  --------------------------------------#\n",
    "# 绘制 ROC曲线\n",
    "from sklearn import metrics\n",
    "import matplotlib.pyplot as plt\n",
    "# fpr假正率，tpr召回率，thresholds阈值，pos_label（设置正样本值）默认为None（标签数据为二分类的情况）\n",
    "fpr, tpr, thresholds = metrics.roc_curve(y_test, y_predict, pos_label=1)\n",
    "roc_auc = metrics.auc(fpr, tpr)  # auc为Roc曲线下的面积\n",
    "plt.plot(fpr, tpr, 'r')  # 绘制ROC曲线\n",
    "axline = np.array([0.,0.2,0.4,0.6,0.8,1.0])  # 斜线参考线坐标\n",
    "plt.plot(axline,axline,'gray',linestyle='--',alpha=0.5)\n",
    "plt.grid(b=True,axis='both',alpha=0.3)  # 显示网格\n",
    "plt.xlim([-0.05, 1.05])  # 设置x轴刻度范围\n",
    "plt.ylim([-0.05, 1.05])  # 设置y轴刻度范围\n",
    "plt.xlabel('FPR')  # x轴是False Positive Rate\n",
    "plt.ylabel('TPR')  # y轴是True Positive Rate\n",
    "plt.title('AUC = %0.2f' % roc_auc)\n",
    "plt.show()\n"
   ],
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "keyword grid_b is not recognized; valid keywords are ['size', 'width', 'color', 'tickdir', 'pad', 'labelsize', 'labelcolor', 'labelfontfamily', 'zorder', 'gridOn', 'tick1On', 'tick2On', 'label1On', 'label2On', 'length', 'direction', 'left', 'bottom', 'right', 'top', 'labelleft', 'labelbottom', 'labelright', 'labeltop', 'labelrotation', 'grid_agg_filter', 'grid_alpha', 'grid_animated', 'grid_antialiased', 'grid_clip_box', 'grid_clip_on', 'grid_clip_path', 'grid_color', 'grid_dash_capstyle', 'grid_dash_joinstyle', 'grid_dashes', 'grid_data', 'grid_drawstyle', 'grid_figure', 'grid_fillstyle', 'grid_gapcolor', 'grid_gid', 'grid_in_layout', 'grid_label', 'grid_linestyle', 'grid_linewidth', 'grid_marker', 'grid_markeredgecolor', 'grid_markeredgewidth', 'grid_markerfacecolor', 'grid_markerfacecoloralt', 'grid_markersize', 'grid_markevery', 'grid_mouseover', 'grid_path_effects', 'grid_picker', 'grid_pickradius', 'grid_rasterized', 'grid_sketch_params', 'grid_snap', 'grid_solid_capstyle', 'grid_solid_joinstyle', 'grid_transform', 'grid_url', 'grid_visible', 'grid_xdata', 'grid_ydata', 'grid_zorder', 'grid_aa', 'grid_c', 'grid_ds', 'grid_ls', 'grid_lw', 'grid_mec', 'grid_mew', 'grid_mfc', 'grid_mfcalt', 'grid_ms']",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mValueError\u001B[0m                                Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[58], line 11\u001B[0m\n\u001B[0;32m      9\u001B[0m axline \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39marray([\u001B[38;5;241m0.\u001B[39m,\u001B[38;5;241m0.2\u001B[39m,\u001B[38;5;241m0.4\u001B[39m,\u001B[38;5;241m0.6\u001B[39m,\u001B[38;5;241m0.8\u001B[39m,\u001B[38;5;241m1.0\u001B[39m])  \u001B[38;5;66;03m# 斜线参考线坐标\u001B[39;00m\n\u001B[0;32m     10\u001B[0m plt\u001B[38;5;241m.\u001B[39mplot(axline,axline,\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mgray\u001B[39m\u001B[38;5;124m'\u001B[39m,linestyle\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m--\u001B[39m\u001B[38;5;124m'\u001B[39m,alpha\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0.5\u001B[39m)\n\u001B[1;32m---> 11\u001B[0m plt\u001B[38;5;241m.\u001B[39mgrid(b\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m,axis\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m,alpha\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0.3\u001B[39m)  \u001B[38;5;66;03m# 显示网格\u001B[39;00m\n\u001B[0;32m     12\u001B[0m plt\u001B[38;5;241m.\u001B[39mxlim([\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m0.05\u001B[39m, \u001B[38;5;241m1.05\u001B[39m])  \u001B[38;5;66;03m# 设置x轴刻度范围\u001B[39;00m\n\u001B[0;32m     13\u001B[0m plt\u001B[38;5;241m.\u001B[39mylim([\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m0.05\u001B[39m, \u001B[38;5;241m1.05\u001B[39m])  \u001B[38;5;66;03m# 设置y轴刻度范围\u001B[39;00m\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\pyplot.py:3144\u001B[0m, in \u001B[0;36mgrid\u001B[1;34m(visible, which, axis, **kwargs)\u001B[0m\n\u001B[0;32m   3137\u001B[0m \u001B[38;5;129m@_copy_docstring_and_deprecators\u001B[39m(Axes\u001B[38;5;241m.\u001B[39mgrid)\n\u001B[0;32m   3138\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mgrid\u001B[39m(\n\u001B[0;32m   3139\u001B[0m     visible: \u001B[38;5;28mbool\u001B[39m \u001B[38;5;241m|\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m,\n\u001B[1;32m   (...)\u001B[0m\n\u001B[0;32m   3142\u001B[0m     \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs,\n\u001B[0;32m   3143\u001B[0m ) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[1;32m-> 3144\u001B[0m     gca()\u001B[38;5;241m.\u001B[39mgrid(visible\u001B[38;5;241m=\u001B[39mvisible, which\u001B[38;5;241m=\u001B[39mwhich, axis\u001B[38;5;241m=\u001B[39maxis, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\axes\\_base.py:3196\u001B[0m, in \u001B[0;36m_AxesBase.grid\u001B[1;34m(self, visible, which, axis, **kwargs)\u001B[0m\n\u001B[0;32m   3194\u001B[0m _api\u001B[38;5;241m.\u001B[39mcheck_in_list([\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mx\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124my\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m], axis\u001B[38;5;241m=\u001B[39maxis)\n\u001B[0;32m   3195\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m axis \u001B[38;5;129;01min\u001B[39;00m [\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mx\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m]:\n\u001B[1;32m-> 3196\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mxaxis\u001B[38;5;241m.\u001B[39mgrid(visible, which\u001B[38;5;241m=\u001B[39mwhich, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[0;32m   3197\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m axis \u001B[38;5;129;01min\u001B[39;00m [\u001B[38;5;124m'\u001B[39m\u001B[38;5;124my\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m]:\n\u001B[0;32m   3198\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39myaxis\u001B[38;5;241m.\u001B[39mgrid(visible, which\u001B[38;5;241m=\u001B[39mwhich, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\axis.py:1697\u001B[0m, in \u001B[0;36mAxis.grid\u001B[1;34m(self, visible, which, **kwargs)\u001B[0m\n\u001B[0;32m   1694\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m which \u001B[38;5;129;01min\u001B[39;00m [\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mmajor\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m]:\n\u001B[0;32m   1695\u001B[0m     gridkw[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mgridOn\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m (\u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_major_tick_kw[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mgridOn\u001B[39m\u001B[38;5;124m'\u001B[39m]\n\u001B[0;32m   1696\u001B[0m                         \u001B[38;5;28;01mif\u001B[39;00m visible \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;28;01melse\u001B[39;00m visible)\n\u001B[1;32m-> 1697\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mset_tick_params(which\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mmajor\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mgridkw)\n\u001B[0;32m   1698\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mstale \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mTrue\u001B[39;00m\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\axis.py:958\u001B[0m, in \u001B[0;36mAxis.set_tick_params\u001B[1;34m(self, which, reset, **kwargs)\u001B[0m\n\u001B[0;32m    945\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m    946\u001B[0m \u001B[38;5;124;03mSet appearance parameters for ticks, ticklabels, and gridlines.\u001B[39;00m\n\u001B[0;32m    947\u001B[0m \n\u001B[1;32m   (...)\u001B[0m\n\u001B[0;32m    955\u001B[0m \u001B[38;5;124;03m    gridlines.\u001B[39;00m\n\u001B[0;32m    956\u001B[0m \u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m    957\u001B[0m _api\u001B[38;5;241m.\u001B[39mcheck_in_list([\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mmajor\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mminor\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m], which\u001B[38;5;241m=\u001B[39mwhich)\n\u001B[1;32m--> 958\u001B[0m kwtrans \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_translate_tick_params(kwargs)\n\u001B[0;32m    960\u001B[0m \u001B[38;5;66;03m# the kwargs are stored in self._major/minor_tick_kw so that any\u001B[39;00m\n\u001B[0;32m    961\u001B[0m \u001B[38;5;66;03m# future new ticks will automatically get them\u001B[39;00m\n\u001B[0;32m    962\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m reset:\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\axis.py:1102\u001B[0m, in \u001B[0;36mAxis._translate_tick_params\u001B[1;34m(kw, reverse)\u001B[0m\n\u001B[0;32m   1100\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m key \u001B[38;5;129;01min\u001B[39;00m kw_:\n\u001B[0;32m   1101\u001B[0m     \u001B[38;5;28;01mif\u001B[39;00m key \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;129;01min\u001B[39;00m allowed_keys:\n\u001B[1;32m-> 1102\u001B[0m         \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m   1103\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mkeyword \u001B[39m\u001B[38;5;132;01m%s\u001B[39;00m\u001B[38;5;124m is not recognized; valid keywords are \u001B[39m\u001B[38;5;132;01m%s\u001B[39;00m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   1104\u001B[0m             \u001B[38;5;241m%\u001B[39m (key, allowed_keys))\n\u001B[0;32m   1105\u001B[0m kwtrans\u001B[38;5;241m.\u001B[39mupdate(kw_)\n\u001B[0;32m   1106\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m kwtrans\n",
      "\u001B[1;31mValueError\u001B[0m: keyword grid_b is not recognized; valid keywords are ['size', 'width', 'color', 'tickdir', 'pad', 'labelsize', 'labelcolor', 'labelfontfamily', 'zorder', 'gridOn', 'tick1On', 'tick2On', 'label1On', 'label2On', 'length', 'direction', 'left', 'bottom', 'right', 'top', 'labelleft', 'labelbottom', 'labelright', 'labeltop', 'labelrotation', 'grid_agg_filter', 'grid_alpha', 'grid_animated', 'grid_antialiased', 'grid_clip_box', 'grid_clip_on', 'grid_clip_path', 'grid_color', 'grid_dash_capstyle', 'grid_dash_joinstyle', 'grid_dashes', 'grid_data', 'grid_drawstyle', 'grid_figure', 'grid_fillstyle', 'grid_gapcolor', 'grid_gid', 'grid_in_layout', 'grid_label', 'grid_linestyle', 'grid_linewidth', 'grid_marker', 'grid_markeredgecolor', 'grid_markeredgewidth', 'grid_markerfacecolor', 'grid_markerfacecoloralt', 'grid_markersize', 'grid_markevery', 'grid_mouseover', 'grid_path_effects', 'grid_picker', 'grid_pickradius', 'grid_rasterized', 'grid_sketch_params', 'grid_snap', 'grid_solid_capstyle', 'grid_solid_joinstyle', 'grid_transform', 'grid_url', 'grid_visible', 'grid_xdata', 'grid_ydata', 'grid_zorder', 'grid_aa', 'grid_c', 'grid_ds', 'grid_ls', 'grid_lw', 'grid_mec', 'grid_mew', 'grid_mfc', 'grid_mfcalt', 'grid_ms']"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 58
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T03:49:59.902846Z",
     "start_time": "2024-09-19T03:49:59.309578Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ------------------------------------  第七部分 模型应用  --------------------------------------#\n",
    "# 预测给定的测试集\n",
    "pre_test = new_test_data[features]\n",
    "result = GBC_model.predict_proba(pre_test)[:,1]\n",
    "test_result = new_test_data[['User_id','Coupon_id','Date_received']]\n",
    "test_result['Probability'] = result\n",
    "# 查看描述性结果\n",
    "test_result['Probability'].describe()\n",
    "test_result.to_csv('./new_sample_submission.csv',index=None,header=None)"
   ],
   "id": "343cfe3865c59f55",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1184\\153430978.py:6: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  test_result['Probability'] = result\n"
     ]
    }
   ],
   "execution_count": 60
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
